Ich habe eine Excel-Tabelle, die in eine CSV-Datei in C# konvertiert wird, aber ich habe ein Problem mit Zeilenumbrüchen zu behandeln. Zum Beispiel:
"John","23","555-5555"
"Peter","24","555-5
555"
"Mary,"21","555-5555"
Wenn ich die CSV-Datei lese und der Datensatz nicht mit einem doppelten Anführungszeichen (") beginnt, wird versehentlich ein Zeilenumbruch eingefügt, den ich entfernen muss. Ich habe einige CSV-Reader-Klassen aus dem Internet, aber ich befürchte, dass sie an den Zeilenumbrüchen scheitern werden.
Wie soll ich mit diesen Zeilenumbrüchen umgehen?
Vielen Dank an alle für ihre Hilfe.
Hier ist, was ich bis jetzt gemacht habe. Meine Datensätze haben ein festes Format und beginnen alle mit
JTW;...;....;...;
JTW;...;...;....
JTW;....;...;..
..;...;... (wrong record, line break inserted)
JTW;...;...
Also habe ich nach dem ;
an der Position [3] jeder Zeile. Wenn true, schreibe ich; wenn false, füge ich an die letzte Zeile an (und entferne den Zeilenumbruch)
Ich habe jetzt Probleme, weil ich die Datei als txt-Datei speichere.
Übrigens konvertiere ich die Excel-Tabelle in eine csv-Datei, indem ich sie in Excel als csv-Datei speichere. Ich bin mir aber nicht sicher, ob der Kunde das auch tut.
Die Datei im TXT-Format ist also perfekt. Ich habe die Datensätze und Summen überprüft. Aber jetzt muss ich sie wieder in eine CSV-Datei umwandeln, und das würde ich gerne im Programm machen. Weiß jemand, wie das geht?
Hier ist mein Code:
namespace EditorCSV
{
class Program
{
static void Main(string[] args)
{
ReadFromFile("c:\\source.csv");
}
static void ReadFromFile(string filename)
{
StreamReader SR;
StreamWriter SW;
SW = File.CreateText("c:\\target.csv");
string S;
char C='a';
int i=0;
SR=File.OpenText(filename);
S=SR.ReadLine();
SW.Write(S);
S = SR.ReadLine();
while(S!=null)
{
try { C = S[3]; }
catch (IndexOutOfRangeException exception){
bool t = false;
while (t == false)
{
t = true;
S = SR.ReadLine();
try { C = S[3]; }
catch (IndexOutOfRangeException ex) { S = SR.ReadLine(); t = false; }
}
}
if( C.Equals(';'))
{
SW.Write("\r\n" + S);
i = i + 1;
}
else
{
SW.Write(S);
}
S=SR.ReadLine();
}
SR.Close();
SW.Close();
Console.WriteLine("Records Processed: " + i.ToString() + " .");
Console.WriteLine("File Created SucacessFully");
Console.ReadKey();
}
}
}
0 Stimmen
Vielleicht verstehe ich das falsch, aber analysieren Sie die Excel-Datei in eine CSV-Datei und haben dann ein Problem, wenn Sie versuchen, sie zu lesen? Wenn das der Fall ist, wie sieht dann der Code aus, mit dem Sie die Excel-Datei in eine CSV-Datei umwandeln?
0 Stimmen
Erzeugen Sie die csv, lesen Sie die csv oder beides?
1 Stimmen
Ah, die Freuden des CSV-Parsing. Es sieht ziemlich einfach aus, hat aber ein paar unangenehme Nebeneffekte.