"CSV"-File in Memo laden - Funktioniert nicht unter Linux
"CSV"-File in Memo laden - Funktioniert nicht unter Linux
Hallo und Guten Morgen,
ich bin dabei, meine Buchführung von Quicken auf GnuCash umzustellen.
GnuCash bietet die Möglichkeit, Daten der Bank im "CSV"-Format einzulesen.
In den von den Banken zur Verfügung gestellten Files sind allerdings eine Vielzahl von immer gleichen Text-"Floskeln" enthalten, die ich vor dem Einlesen in GnuCash mit dem Befehl "StringReplace" aus dem "CSV"-File entfernen möchte.
WICHTIG: Tabulatorzeichen, Separatoren usw. werden bei diesem Vorgang NICHT entfernt oder verändert.
Zur Kontrolle des Ergebnisses von "StringReplace" möchte ich das "CSV-File" "vorher" und "nachher" in ein Memo-Feld laden.
All dies funktioniert unter Windows völlig problemlos!! Auch das Einlesen eines so veränderten "CSV"-Files in GnuCash.
Wenn ich aber das Programm unter Linux kompiliere, dann läuft das Programm zwar problemlos, das Memo liest auch "normale" ".txt"-Files ein, verweigert aber hartnäckig seinen Dienst unter Linux, aber nur bei "CSV"-Files: Das Memo-Feld bleibt nach dem Einlesen leer; egal ob ich es mit "Memo1.Lines.LoadFromFile()" einlese oder mit einer Prozedur, die "TFileStream" verwendet.
Meine Frage nun:
Warum verhält sich das Windows-Kompilat anders als das Linux-Kompilat?
Welche "Text-Bestandteile" stören das "Linux-Memo"?
Was muss ich tun, dass ich auch unter Linux das "csv"-File einlesen kann?
Das "CSV-File" möchte ich nicht extra vorher auftrennen müssen, es sollte ganz einfach nur der gesamte String in ein Memo-Feld eingelesen werden können - so wie es ja unter Windows sehr gut funktioniert.
Noch ein Hinweis: Wenn ich das "CSV-File" nur in einen String lade, diesen String dann mit "StringReplace" bearbeite und den String dann gleich wieder in ein File speichere, dann werden - auch unter Linux - die Textveränderungen völlig korrekt durchgeführt, das "CSV-File" bleibt korrekt und kann in "GnuCash" eingelesen werden; nur das "Linux-Memo" mag die "CSV-Files" offenbar nicht.
Einen schönen Tag aus dem sonnigen Bayern!
Aliobaba
ich bin dabei, meine Buchführung von Quicken auf GnuCash umzustellen.
GnuCash bietet die Möglichkeit, Daten der Bank im "CSV"-Format einzulesen.
In den von den Banken zur Verfügung gestellten Files sind allerdings eine Vielzahl von immer gleichen Text-"Floskeln" enthalten, die ich vor dem Einlesen in GnuCash mit dem Befehl "StringReplace" aus dem "CSV"-File entfernen möchte.
WICHTIG: Tabulatorzeichen, Separatoren usw. werden bei diesem Vorgang NICHT entfernt oder verändert.
Zur Kontrolle des Ergebnisses von "StringReplace" möchte ich das "CSV-File" "vorher" und "nachher" in ein Memo-Feld laden.
All dies funktioniert unter Windows völlig problemlos!! Auch das Einlesen eines so veränderten "CSV"-Files in GnuCash.
Wenn ich aber das Programm unter Linux kompiliere, dann läuft das Programm zwar problemlos, das Memo liest auch "normale" ".txt"-Files ein, verweigert aber hartnäckig seinen Dienst unter Linux, aber nur bei "CSV"-Files: Das Memo-Feld bleibt nach dem Einlesen leer; egal ob ich es mit "Memo1.Lines.LoadFromFile()" einlese oder mit einer Prozedur, die "TFileStream" verwendet.
Meine Frage nun:
Warum verhält sich das Windows-Kompilat anders als das Linux-Kompilat?
Welche "Text-Bestandteile" stören das "Linux-Memo"?
Was muss ich tun, dass ich auch unter Linux das "csv"-File einlesen kann?
Das "CSV-File" möchte ich nicht extra vorher auftrennen müssen, es sollte ganz einfach nur der gesamte String in ein Memo-Feld eingelesen werden können - so wie es ja unter Windows sehr gut funktioniert.
Noch ein Hinweis: Wenn ich das "CSV-File" nur in einen String lade, diesen String dann mit "StringReplace" bearbeite und den String dann gleich wieder in ein File speichere, dann werden - auch unter Linux - die Textveränderungen völlig korrekt durchgeführt, das "CSV-File" bleibt korrekt und kann in "GnuCash" eingelesen werden; nur das "Linux-Memo" mag die "CSV-Files" offenbar nicht.
Einen schönen Tag aus dem sonnigen Bayern!
Aliobaba
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )
Re: "CSV"-File in Memo laden - Funktioniert nicht unter Linux
Klingt, als ob die Datei nicht UTF-8 kodiert ist und Umlaute etc. enthält.
Probier mal so:
Probier mal so:
Code: Alles auswählen
uses ... LConvEncoding;
var SL:TStringList;
begin
SL:=TStringList.Create;
SL.LoadFromFile('ansitest.txt');
Memo1.Text:=CP1252ToUTF8(SL.Text);
SL.free;
end;
Re: "CSV"-File in Memo laden - Funktioniert nicht unter Linux
Hallo theo,
Super!!! Vielen, vielen Dank! Funktioniert!!
Sicher gibt es gute Gründe, warum dies bei der Windows-Version anders ist als bei der Linux Version.
Liebe Grüße
Aliobaba
Super!!! Vielen, vielen Dank! Funktioniert!!
Sicher gibt es gute Gründe, warum dies bei der Windows-Version anders ist als bei der Linux Version.
Liebe Grüße
Aliobaba
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )
Re: "CSV"-File in Memo laden - Funktioniert nicht unter Linux
Eine absolut qualifizierte Antwort kann ich dir nicht geben, aber modernes Linux benutzt nun mal durchgehend Unicode/UTF-8 und keine 8-bit Codepage, wie Windows.Aliobaba hat geschrieben: So 13. Feb 2022, 10:03 Sicher gibt es gute Gründe, warum dies bei der Windows-Version anders ist als bei der Linux Version.
Da ein Memo nur das Widgetset Control kapselt, hier wahrscheinlich das GtkTextView, kann es damit halt nichts anfangen.
Automatische Konvertierung kann trickreich sein, da eine ANSI Textdatei keine konkrete Information enthält, wie sie kodiert ist.
Mein Tipp mit CP1252ToUTF8 ist ja auch nur eine Vermutung. Für einen russischen Text müsstest du vielleicht KOI8RToUTF8 verwenden.
https://en.wikipedia.org/wiki/KOI8-R
Re: "CSV"-File in Memo laden - Funktioniert nicht unter Linux
Ich hab's gerade ausprobiert: Unter Windows mit Notepad++ eine Datei mit dem Text 'abc-äöü-ABC' erzeugt und als Codepage 1252 gespeichert, nach Linux kopiert und mit Lazarus dort in ein Memo eingelesen -> das Memo bleibt leer. Wundert mich allerdings, dass das sonst so liberale Linux einem gleich den ganzen Text vorenthält, bloß weil vielleicht auch nur ein einziges nicht UTF-8 konformes Zeichen enthalten ist. Da finde ich das Verhalten von Windows praktischer, das alles anzeigt, nur halt bei den Nicht-UTF-8-Bytes Unsinn. So bleibt bis auf diese wenigen Zeichen der Inhalt des Textes erkennbar.
Re: "CSV"-File in Memo laden - Funktioniert nicht unter Linux
Das ist schon etwas polemisch. Verantwortlich ist nicht "Linux" sondern das Zusammenspiel zwischen GtkTextView und Lazarus.wp_xyz hat geschrieben: So 13. Feb 2022, 10:59 Wundert mich allerdings, dass das sonst so liberale Linux einem gleich den ganzen Text vorenthält, bloß weil vielleicht auch nur ein einziges nicht UTF-8 konformes Zeichen enthalten ist. Da finde ich das Verhalten von Windows praktischer, das alles anzeigt, nur halt bei den Nicht-UTF-8-Bytes Unsinn.
Mit dem "LCLWidgetType" Qt4/5 wird zwar der Text geladen, aber die fraglichen Zeichen werden mit "?" ersetzt.
Ob das nun besser ist?
Tatsache ist, dass 8-bit Codepages nicht zuverlässig automatisch nach Unicode konvertiert werden können, weil die Quellcodierung (meist) nicht in der Datei definiert ist.
Re: "CSV"-File in Memo laden - Funktioniert nicht unter Linux
P.S. Das gleiche Verhalten mit den "?" lässt sich für GTK einstellen, indem man so lädt:
Code: Alles auswählen
Memo1.lines.LoadFromFile('ansi.txt', TEncoding.ASCII);
Re: "CSV"-File in Memo laden - Funktioniert nicht unter Linux
Hallo,
der Text wird mit dieser Maßnahme
Memo1.Text:=CP1252ToUTF8(SL.Text)
nun zwar im Memo-Textfeld angezeigt, aber nun treten die Probleme mit den Umlauten noch auf:
" ABC_äöü-ÄÖÜ- " --> " äöü-ÄÖÜ- "

der Text wird mit dieser Maßnahme
Memo1.Text:=CP1252ToUTF8(SL.Text)
nun zwar im Memo-Textfeld angezeigt, aber nun treten die Probleme mit den Umlauten noch auf:
" ABC_äöü-ÄÖÜ- " --> " äöü-ÄÖÜ- "


"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )
Re: "CSV"-File in Memo laden - Funktioniert nicht unter Linux
Na dann war die Quellcodierung eine andere oder die Quelle war schon UTF-8 und anderweitig "korrupt".
Bin aber kein Hellseher (leider).
Bin aber kein Hellseher (leider).
Re: "CSV"-File in Memo laden - Funktioniert nicht unter Linux
... gibt es dafür nicht auch eine weitere Konvertierungsmöglichkeit, die sich nur um dieses Umlaute-Problem kümmert?
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: "CSV"-File in Memo laden - Funktioniert nicht unter Linux
Hi!Aliobaba hat geschrieben: Mo 14. Feb 2022, 08:15 Hallo,
der Text wird mit dieser Maßnahme
Memo1.Text:=CP1252ToUTF8(SL.Text)
nun zwar im Memo-Textfeld angezeigt, aber nun treten die Probleme mit den Umlauten noch auf:
" ABC_äöü-ÄÖÜ- " --> " äöü-ÄÖÜ- "
![]()
![]()
So sahen in den späten 90ern die Webseiten aus, wenn man mit Win95/98 - also Win1252 - unterwegs war und auf eine Webseite stieß, die mit UTF-8 codiert war.
Winni
PS.: Zip doch bitte mal Deinen Originaltext und kleb den an einen Beitrag. Dann können wir mittels Hex-Editor nachsehen, was da nun wirklich steht.
Zuletzt geändert von Winni am Mo 14. Feb 2022, 09:46, insgesamt 1-mal geändert.
Re: "CSV"-File in Memo laden - Funktioniert nicht unter Linux
Wenn mit CP1252ToUTF8 die Umlaute nicht funktionieren, dann war die Konvertierung falsch und es braucht keine "weitere" Konvertierung.Aliobaba hat geschrieben: Mo 14. Feb 2022, 09:22 ... gibt es dafür nicht auch eine weitere Konvertierungsmöglichkeit, die sich nur um dieses Umlaute-Problem kümmert?
Wenn du den Text nicht anhängst, kann man aber nicht viel sagen.
Wenn du auf Linux/KDE bist, schau doch mal was z.B. KWrite als Kodierung anzeigt. So etwas gibt es bestimmt auch für andere Systeme, aber die kenne ich nicht.
Re: "CSV"-File in Memo laden - Funktioniert nicht unter Linux
Ich nutze unter Windows dafür den Total Commander. Man benötigt aber nicht zwangsläufig einen externen Dienst. Man kann die Datein auch per DragNDrop in das aktuell geöffnete Lazarus-Fenster ziehen. Da wird die Datei im SourceEditor angezeigt: rechtsklick auf Source -> Menu Dateieinstellungen -> Zeichenkodierung -> Man sieht die aktuell verwendete Zeichenkodierungtheo hat geschrieben: Mo 14. Feb 2022, 09:44Wenn du auf Linux/KDE bist, schau doch mal was z.B. KWrite als Kodierung anzeigt. So etwas gibt es bestimmt auch für andere Systeme, aber die kenne ich nicht.
Wenn dabei ungewöhliche Zeichen angezeigt werden, kann man die Datei mit anderer Kodierung anzeigen. Solange, bis man die richtige Kodierung gefunden hat: rechtsklick auf Source -> Menu Dateieinstellungen -> Zeichenkodierung -> andere Kodierung wählen -> Mit anderer Kodierung erneut lesen
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1647
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: "CSV"-File in Memo laden - Funktioniert nicht unter Linux
Notepad++ zeigt den verwendeten Zeichensatz auch ziemlich zuverlässig an.
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: "CSV"-File in Memo laden - Funktioniert nicht unter Linux
Hi!
Wenn wir den Originaltext nicht haben, ist alles nur Tappen im Dunkeln.
Ich habe die Vemutung, dass im Text zwei (oder mehrere) Codierungen gemischt werden.
Winni
Wenn wir den Originaltext nicht haben, ist alles nur Tappen im Dunkeln.
Ich habe die Vemutung, dass im Text zwei (oder mehrere) Codierungen gemischt werden.
Winni