![]() |
Textdateien zusammenfassen - irgedwie falsch
Moin,
ich versuche hier ein paar CSV-Dateien aus einem Datev-Export in einer neuen Textdatei zusammen zu fassen (der Anwender soll nachher nicht x-Mal den Imoportvorgang starten müssen). Dazu lese ich aus einem Verzeichnis die darin enthaltenen Dateien ein und schiebe den Inhalt dann in ein memo um den Inhalt dann nachher in eine Datei zu exportieren. Theoretisch funktioniert das auch, aber: Ich will den Header aus den exportdateien nur einmal in meiner zusammengefassten Datei haben und irgendwie werden da auch Zeilen doppelt übertragen, ich weiß nur nicht wieso. Hier mal der Code:
Delphi-Quellcode:
Sieht hier jemand meinen Fehler?
procedure TfDatevBuchungsstapelimport.ReadDatevCSV;
const sDir = '\\blabla\freigabe\pawi\import\datev\'; Var sl_files : TstringList; sl_content : TstringList; i,y : Integer; begin Screen.Cursor := crHourGlass; sl_files := TstringList.Create(); GetFilesInDirectory(sDir, '*.txt',sl_files,False); memo_datev.Lines.Clear; memo_datev.Visible := False; For I := 0 to sl_files.Count - 1 Do Begin sl_content := TstringList.Create(); sl_content.LoadFromFile(sDir+sl_files[i]); // den Header aus der Exportdatei wollen wir nur einmal haben... If I >0 Then sl_content.Delete(0); memo_datev.Lines.AddStrings(sl_content); sl_content.Free; End; If memo_datev.Lines.Text <> '' Then memo_datev.Lines.SaveToFile(sDir+'_Buchungen.csv'); If memo_datev.Lines.Text <> '' Then memo_datev.Lines.SaveToFile(sDir+'Buchungen.csv'); sl_files.Free; Screen.Cursor := crDefault; end; Gruß |
AW: Textdateien zusammenfassen - irgedwie falsch
TMemo als Zwischenspeicher, warum ein Langsames Memo, anstatt einer TStirngList?
Was heißt "doppelt", bzw. welche Zeilen sind doppelt und sicher, dass sie nicht doch mehrfach in den Dateien drin sind? Ich seh jetzt auch nichts im Code, was Zeilen vermehren sollte. Na gut, dass sl_content ständig gelöscht und neu erstellt wird, wäre zu verkrafen, aber für die fehlenden Ressourcenschutzblöcke sollte jemand mindestens ausgepeitscht werden. Der Selbe Code, * nur ohne die Arbeit im Memo zu machen, * mit einem Schutzblock * und im Debugger kann man sich auch wunderschön ansehn, wie nach und nach sl_allcontent voller wird und was jederzeit sich darin befindet.
Delphi-Quellcode:
procedure TfDatevBuchungsstapelimport.ReadDatevCSV;
... begin Screen.Cursor := crHourGlass; sl_files := TStringList.Create; sl_newcontent := TStringList.Create; sl_allcontent := TStringList.Create; // Ja 3x ... bei diesem Create kann es eigentlich nie knallen und wenn, dann ist eh alles zu spät (OutOfMemory, BufferOverun usw.) try GetFilesInDirectory(sDir, '*.txt', sl_files, False); for I := 0 to sl_files.Count - 1 do begin sl_content.LoadFromFile(sDir + sl_files[i]); if I > 0 then sl_content.Delete(0); // den Header aus der Exportdatei wollen wir nur einmal haben... sl_allcontent.AddStrings(sl_content); end; if sl_allcontent.Count <> 0 then begin sl_allcontent.SaveToFile(sDir + '_Buchungen.csv'); sl_allcontent.SaveToFile(sDir + 'Buchungen.csv'); end; memo_datev.Visible := False; memo_datev.Text := sl_allcontent.Text; // kein AddStrings, da TMemo im Einzelzeilenzugriff arschlahm ist finally sl_files.Free; sl_newcontent.Free; sl_allcontent.Free; Screen.Cursor := crDefault; end; end; |
AW: Textdateien zusammenfassen - irgedwie falsch
Jede datei hat einen Header, wenn man mehrere Dateien aneinanderhängt ist der Header dann natürlich mehrfach vorhanden.
Ab der 2. Datei erst ab der 3. Zeile Anhängen. |
AW: Textdateien zusammenfassen - irgedwie falsch
Zitat:
|
AW: Textdateien zusammenfassen - irgedwie falsch
Hallo,
ist der Header wirklich nur 1 Zeile lang? Was ist denn konkret falsch? |
AW: Textdateien zusammenfassen - irgedwie falsch
Zitat:
"Doppelt ausgepeitscht"... du Frechdachs... Nein, das Ganze ist so ein schnell hingepfuschter Block. Die Fehlerbehandlung hätte ich für den abschließenden Code noch reingemacht |
AW: Textdateien zusammenfassen - irgedwie falsch
Zitat:
|
AW: Textdateien zusammenfassen - irgedwie falsch
Zitat:
Umsatz (ohne Soll/Haben-Kz);Soll/Haben-Kennzeichen;WKZ Umsatz;Kurs;Basis-Umsatz;WKZ Basis-Umsatz;Konto;Gegenkonto (ohne BU-Schlüssel);BU-Schlüssel;Belegdatum;Belegfeld 1;Belegfeld 2;Skonto;Buchungstext;Postensperre;Diverse Adressnummer;Geschäftspartnerbank;Sachverhalt;Zins sperre;Beleglink;Beleginfo - Art 1;Beleginfo - Inhalt 1;Beleginfo - Art 2;Beleginfo - Inhalt 2;Beleginfo - Art 3;Beleginfo - Inhalt 3;Beleginfo - Art 4;Beleginfo - Inhalt 4;Beleginfo - Art 5;Beleginfo - Inhalt 5;Beleginfo - Art 6;Beleginfo - Inhalt 6;Beleginfo - Art 7;Beleginfo - Inhalt 7;Beleginfo - Art 8;Beleginfo - Inhalt 8;KOST1 - Kostenstelle;KOST2 - Kostenstelle;Kost-Menge;EU-Land u. UStID;EU-Steuersatz;Abw. Versteuerungsart;Sachverhalt L+L;Funktionsergänzung L+L;BU 49 Hauptfunktionstyp;BU 49 Hauptfunktionsnummer;BU 49 Funktionsergänzung;Zusatzinformation - Art 1;Zusatzinformation- Inhalt 1;Zusatzinformation - Art 2;Zusatzinformation- Inhalt 2;Zusatzinformation - Art 3;Zusatzinformation- Inhalt 3;Zusatzinformation - Art 4;Zusatzinformation- Inhalt 4;Zusatzinformation - Art 5;Zusatzinformation- Inhalt 5;Zusatzinformation - Art 6;Zusatzinformation- Inhalt 6;Zusatzinformation - Art 7;Zusatzinformation- Inhalt 7;Zusatzinformation - Art 8;Zusatzinformation- Inhalt 8;Zusatzinformation - Art 9;Zusatzinformation- Inhalt 9;Zusatzinformation - Art 10;Zusatzinformation- Inhalt 10;Zusatzinformation - Art 11;Zusatzinformation- Inhalt 11;Zusatzinformation - Art 12;Zusatzinformation- Inhalt 12;Zusatzinformation - Art 13;Zusatzinformation- Inhalt 13;Zusatzinformation - Art 14;Zusatzinformation- Inhalt 14;Zusatzinformation - Art 15;Zusatzinformation- Inhalt 15;Zusatzinformation - Art 16;Zusatzinformation- Inhalt 16;Zusatzinformation - Art 17;Zusatzinformation- Inhalt 17;Zusatzinformation - Art 18;Zusatzinformation- Inhalt 18;Zusatzinformation - Art 19;Zusatzinformation- Inhalt 19;Zusatzinformation - Art 20;Zusatzinformation- Inhalt 20;Stück;Gewicht;Zahlweise;Forderungsart;Veranlagu ngsjahr;Zugeordnete Fälligkeit;Skontotyp;Auftragsnummer;Buchungstyp;US t-Schlüssel (Anzahlungen);EU-Land (Anzahlungen);Sachverhalt L+L (Anzahlungen);EU-Steuersatz (Anzahlungen);Erlöskonto (Anzahlungen);Herkunft-Kz;Buchungs GUID;KOST-Datum;SEPA-Mandatsreferenz;Skontosperre;Gesellschaftername;Be teiligtennummer;Identifikationsnummer;Zeichnernumm er;Postensperre bis;Bezeichnung SoBil-Sachverhalt;Kennzeichen SoBil-Buchung;Festschreibung;Leistungsdatum;Datum Zuord. Steuerperiode Allerdings taucht dieser Header, trotz meiner Löschung des ersten Eintrages in der sl_content, mehrfach in der Augabedatei auf...
Delphi-Quellcode:
stop, alle Kraft zurück:
if I > 0 then
sl_content.Delete(0); // den Header aus der Exportdatei wollen wir nur einmal haben... Jetzt sehe ich, dass Datev diesen "Header" in einer Exportdatei zwei Mal hinterlassen hat, wieso auch immer. Abschließend ist also an dieser Stelle von meiner Seite aus, bis auf das fehledne try finally, nichts falsch gelaufen. Danke trotzdem |
AW: Textdateien zusammenfassen - irgedwie falsch
Wenn doppelte Header sowieso "erlaubt" sind, dann könnte man auch Alle drin lassen.
Oder zu weißt wie der Header aussieht, bzw. anfängt und löschst alle Zeilen, die z.B. mit
Delphi-Quellcode:
beginnen.
Umsatz (ohne Soll/Haben-Kz);
Doppelte Zeilen zu entfernen wäre jetzt auch nicht das große Problem. Die Stringliste am Ende noch einmal durchlaufen (count-1 downto 0), mit IndexOf schauen, ob die Zeile (nochmal) gefunden wird, also gefundener Index kleiner als der aktuelle Index, und wenn ja, dann die aktuelle Zeile (I) löschen. |
AW: Textdateien zusammenfassen - irgedwie falsch
Zitat:
Und damit würden auch die zu vielen identischen Header gelöscht ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz