2011-01-17 12 views
0

Diese Frage scheint im Internet millionenfach gestellt worden zu sein, aber ich kann keine Antwort finden, die für mich funktioniert.Text an Zeilen in einer CSV-Datei anhängen

Grundsätzlich habe ich eine CSV-Datei, die eine Anzahl von Spalten (zwei) hat. Das Programm durchläuft jede Zeile in der CSV-Datei, nimmt den ersten Spaltenwert und fragt dann den Benutzer nach dem Wert, der in der zweiten Spalte platziert werden soll. Dies geschieht auf einem Handheld unter Windows 6. Ich entwickle mit C#.

Es scheint eine einfache Sache zu tun. Aber ich kann anscheinend keinen Text zu einer Zeile hinzufügen.

Ich kann OleDb nicht verwenden, da System.Data.Oledb nicht in der .Net-Version ist, die ich verwende. Ich könnte eine andere CSV-Datei verwenden, und wenn sie jede Zeile abgeschlossen haben, schreibt sie sie in eine andere CSV-Datei. Aber die Probleme damit sind - Die Datei, die am Ende produziert wird, muss jede Zeile enthalten (was ist, wenn sie die Batterien halb herausziehen). Und was, wenn sie zurückgehen, um dies ein weiteres Mal zu machen, wie wird das Programm wissen, wo es wieder anfangen soll?

Antwort

1

Öffnen Sie für jede Zeile die Ausgabedatei, hängen Sie die neue Zeile an und schließen Sie die Ausgabedatei. Um neu zu starten, zählen Sie die Anzahl der Zeilen in der vorhandenen Ausgabedatei von der vorherigen Ausführung, wodurch Sie in der Eingabedatei beginnen (d. H. Die Anzahl der Zeilen in der Eingabedatei überspringen).

Edit: direkt am Anfang, verwenden Sie System.IO.File.Copy, um die Eingabedatei in die Ausgabedatei zu kopieren, so dass Sie die gesamte Datei im Falle eines Fehlers haben. Öffnen Sie nun die Eingabedatei, lesen Sie eine Zeile, konvertieren Sie sie, verwenden Sie File.ReadAllLines, um ALLE Ausgabedateien in ein Array zu lesen, ersetzen Sie die Zeile, die Sie am rechten Index im Array geändert haben, und verwenden Sie dann File.WriteAllLines die neue Ausgabedatei.

Etwas wie folgt aus:

string inputFileName = ""; // Use a sensible file name. 
string outputFileName = ""; // Use a sensible file name. 
File.Copy(inputFileName, outputFileName, true); 
using (StreamReader reader = new StreamReader(inputFileName)) 
{ 
    string line = null; 
    int inputLinesIndex = 0; 
    while ((line = reader.ReadLine()) != null) 
    { 
     string convertedLine = ConvertLine(line); 
     string[] outputFileLines = File.ReadAllLines(outputFileName); 
     if (inputLinesIndex < outputFileLines.Length) 
     { 
      outputFileLines[inputLinesIndex] = convertedLine; 
      File.WriteAllLines(outputFileName, outputFileLines); 
     } 
     inputLinesIndex++; 
    } 
} 
+0

Vielen Dank für Ihre Hilfe, aber dieses nicht das Problem lösen, dass die End-Datei, die alle Zeilen aus dem Original enthalten muss. Wenn sie zurückgehen oder die Batterien herausziehen, ist die Datei die gleiche wie das Original, aber mit einer bestimmten Anzahl von Zeilen gefüllt – MichaelMcCabe

+0

Die Enddatei enthält alle Zeilen aus dem Original. Öffnen Sie die Eingabedatei (die Originaldatei), lesen Sie eine Zeile, konvertieren Sie die Zeile nach Bedarf, öffnen Sie die Ausgabedatei, hängen Sie die konvertierte Zeile an die Ausgabedatei an, schließen Sie die Ausgabedatei und wiederholen Sie (lesen Sie die nächste Zeile). Wenn Sie den Akku herausziehen, werden in der Ausgabedatei alle Zeilen an diesem Punkt gespeichert, sodass Sie weitermachen können, wo Sie aufgehört haben. – Polyfun

+0

Sorry, ich war nicht sehr klar. Ich brauche die Enddatei, die ALLES vom Original enthält. Selbst wenn es nicht abgeschlossen wurde, muss die Enddatei alles enthalten. (Diese CSV-Datei wird an anderer Stelle verwendet). Also, wenn die Eingabedatei 600 Zeilen enthält und sie 100 vervollständigen. Dann muss die Ausgabedatei 600 Zeilen enthalten, wobei die ersten 100 vollständig sein müssen. – MichaelMcCabe