title: C# removing last delimited field from a string split
body: <p>I am a beginner c# programmer and just had a quick question on an application I am building. My process reads in multiple files with the purpose of stripping out specific records based on a 1 or 0 pipe delimited field in the text file. It is the last delimited field in the file actually. If it is a 0, I write it to a temp file (which will later replace the original that I read), if it is anything else I do not. And not to try to get it too confusing but there are two types of records in the file, a header row, and then that is followed by a few supp rows. The header row is the only one that has the flag, so as you can tell from below, if the bool gets set to a good record by being 0, it writes the header record along with all supp records below it until it hits a bad one in which case it will negate writing them until the next good one. </p>
  
  <p>However, what I am trying to do now (and would like to know the easiest way), is how to write the header record without the last pipe delimited field (IE the flag). Since it should always be the last 2 characters of the row (for example "0|" or "1|" as the preceeding pipe is needed), should it be a string trim on my inputrecord string? Is there an easier way? Is there a way to do a split on the record but not actually include the last field (in this case, field 36)? Any advice would be appreciated. Thank you, </p>
  
  <pre><code>static void Main(string[] args)
  {
      try
      {
          string executionDirectory = RemoveFlaggedRecords.Properties.Settings.Default.executionDirectory;
          string workDirectory = RemoveFlaggedRecords.Properties.Settings.Default.workingDirectory;
  
          string[] files = Directory.GetFiles(executionDirectory, "FilePrefix*");             
          foreach (string file in files)
          {
              string tempFile = Path.Combine(workDirectory,Path.GetFileName(file));
              using (StreamReader sr = new StreamReader(file,Encoding.Default))
              {
                  StreamWriter sw = new StreamWriter(tempFile);
                  string inputRecord = sr.ReadLine();
  
                  bool goodRecord = false;
                  bool isheaderRecord = false;
                  while (inputRecord != null)
                  {
                      string[] fields = inputRecord.Split('|');
                      if (fields[0].ToString().ToUpper() == "HEADER")
                      {                               
                          goodRecord = Convert.ToInt32(fields[36]) == 0;
                          isheaderRecord = true;
                      }
  
                      if (goodRecord == true &amp;&amp; isheaderRecord == true)
                      {       
                          //    I'm not sure what to do here to write the string without the 36th field***
                      }
                      else if (goodRecord == true)
                      {
                          sw.WriteLine(inputRecord);
                      }
  
                      inputRecord = sr.ReadLine();
                  }
  
                  sr.Close();
                  sw.Close();
                  sw = null;
              }    
          }
  
          string[] newFiles = Directory.GetFiles(workDirectory, "fileprefix*");
          foreach (string file in newFiles)
          {
              string tempFile = Path.Combine(workDirectory, Path.GetFileName(file));
              string destFile = Path.Combine(executionDirectory, Path.GetFileName(file));
  
              File.Copy(tempFile, destFile, true);
              if (File.Exists(destFile))
              {
                  File.Delete(tempFile);
              }
          }
      }
      catch (Exception ex)
      {
          Console.WriteLine(ex);
      }
  
      finally
      {
          // not done   
      }
  }
  </code></pre>