2013-11-15 10 views
5

Ho questo codice per combinare 2 file csv diversi.Come ignorare un campo e impostare il campo ignorato come variabile globale all'interno della funzione?

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; 
     } 
    } 
} 

mio boxdata = data1;data2;data3;data4;data5

Al momento data2 a dati5 sta ottenendo nel file di iniziolavoro.

Data5 non deve essere incluso nel file JobStart.

Desidero impostare data5 come variabile globale.

Come posso fare questo, non riesco proprio a capirlo, ho bisogno di aiuto.

Questo può aiutare a capire il mio problema: How to compare 2 .csv files and create a new .csv containing parts from both csv files?

risposta

1

ecco come lo sovled il mio problema:

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

Questa non è la soluzione migliore, ma anche se si voleva proclamare la propria risposta come quella giusta fin dall'inizio, si dovrebbe almeno sapere che si dovrebbe usare StringBuilder invece di "+ =" e usare "using" invece di dimenticare semplicemente di disporre/chiudere i flussi. Ti auguro il meglio. –

+0

@LepiPerke Non l'ho contrassegnato come una "migliore" risposta ma più come "come l'ho fatto" Non sono affatto il miglior programmatore. D'altra parte sono un nuovo programmatore di C# ... Ma per il tuo consiglio – 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; 
     } 
    } 
} 

Questo risolve un pò quello che ho capito di essere il vostro problema.

Problemi correlati