2013-11-15 56 views
5

我有這個代碼來結合2個不同的csv文件。如何忽略一個字段並將忽略的字段設置爲函數內的全局變量?

try 
{ 
    var jobStartLine = File.OpenText(PackAuftrag).ReadLine(); 
    var comparisonField = jobStartLine.Split(';')[4]; 

    foreach (var line in File.ReadAllLines(BoxData)) 
    { 
     var fields = line.Split(new char[] {';'}, 2); 

     if (comparisonField == fields[0]) 
     { 
      File.WriteAllLines(JobStart, 
           new string[] {jobStartLine + ";" + fields[1]}); 
      break; 
     } 
    } 
} 

我BoxData = data1;data2;data3;data4;data5

目前數據2至數據5越來越在首次工文件。

Data5不應包含在JobStart文件中。

我想將data5設置爲全局變量。

我該怎麼做,我只是無法弄清楚,需要幫助。

這可以幫助理解我的問題:How to compare 2 .csv files and create a new .csv containing parts from both csv files?

回答

1

這裏是我sovled我的問題:

if (File.Exists(JobStart)) 
     { 
      File.Delete(JobStart); 
     } 

     try 
     { 
      var jobStartLine = File.OpenText(PackAuftrag).ReadLine(); 
      var comparisonField = jobStartLine.Split(';')[4]; 

     foreach (var line in File.ReadAllLines(BoxData)) 
      { 
       var fields = line.Split(new char[] { ';' }, 2); 



       if (comparisonField == fields[0]) 
       { 

        string string2write = ""; 
        string2write += JobName + ','; 
        string2write += jobStartLine.Split(';')[0] + ','; 
        string2write += jobStartLine.Split(';')[1] + ','; 
        string2write += jobStartLine.Split(';')[2] + ','; 
        string2write += jobStartLine.Split(';')[3] + ','; 
        string2write += jobStartLine.Split(';')[5] + ','; 
        string2write += line.Split(';')[1] + ','; 
        string2write += line.Split(';')[2] + ','; 

        string2write += line.Split(';')[3] + ','; 
        string2write += line.Split(';')[4] + ','; 
        string2write += line.Split(';')[5] + ','; 
        string2write += line.Split(';')[6]; 
        PrinterSelected = line.Split(';')[7]; 

        FileStream fst = new FileStream(JobStart, FileMode.Create, FileAccess.Write); 
        StreamWriter stw = new StreamWriter(fst, Encoding.Default); 
        stw.Write(string2write); 
        stw.Dispose(); 
        stw.Close(); 

//      File.WriteAllLines(JobStart, new string[] { jobStartLine + ";" + fields[1]}); 


        break; 
       } 
+2

這是不是最好的解決方案,但即使你想宣揚自己的答案,因爲從一開始就正確的,你至少應該知道,你應該使用StringBuilder而不是「+ =」並使用「使用」而不是忘記處理/關閉流。祝一切順利。 –

+0

@LepiPerke我沒有把它標記爲「最好」的答案,但更像是「我是如何做到的」我根本不是最好的程序員。另一方面,我是C#的新程序員......但thx爲您的建議 – RamHS

1
var foo = string.Empty; 

try 
{ 
    var jobStartLine = File.OpenText(PackAuftrag).ReadLine(); 
    var comparisonField = jobStartLine.Split(';')[4]; 

    foreach (var line in File.ReadAllLines(BoxData)) 
    { 
     var fields = line.Split(new char[] {';'}, 5).ToList(); 
     foo = fields[4]; 
     fields.RemoveAt(4); 

     if (comparisonField == fields[0]) 
     { 
      File.WriteAllLines(JobStart, 
          new string[] {jobStartLine + ";" + String.Join(';', fields.ToArray())}); 
      break; 
     } 
    } 
} 

這有點兒解決我的理解是你的問題。