hbr hat geschrieben:ist aber nun ein Umlaut im File enthalten, dann stürzt mein Programm ab.
Was muss ich (wo) einbauen um eine Konvertierung vor zu nehmen.
Könntest du die Datei zur Fehlersuche bereitstellen? Ein Umlaut in der Datei sollte dein Programm nicht zum Absturz bringen.
Sollte aber der Dateiname einen Umlaut enthalten, musst du diesen konvertieren. Falls dein Dateiname in UTF-8 vorliegt, kannst du die Funktion UTF8ToSys() aus der Unit FileUtil verwenden.
Hallo Socke, Danke für deine Mühe,
die Umlaute werden nicht konvertiert!
z.B. bei einem Namen Rüdiger sieht das beim debuggen so aus 'R#252'diger
Der Fehler liegt aber wo anders.
Die Fehlermeldung lautet 'EStringListError.. Listindex (5) out of bounds'.
Der geht immer nur bis maximal 5 Einträge obwohl die CSV viel mehr hat.
Die csv besteht nur aus zwei Namen einem Datum und einem Komentar.
Ich mach das ganze jetzt über normale Strings und AssignFile(f, da weiß ich auch das es Funktioniert.
Übrigens bei Windows.
Sobald ich Opendialoge im Programm verwende hängt der Debugger, ist das normal?
Fehlermeldung:
The GDB command:
"-file-exec-and-symbols "
did not return any result.
theo hat geschrieben:Ist ja auch merkwürdig dein Code.
Du iterierst durch slFile und wendest dann i auf slRow an?
Ja, Recht hast Du!
Hab jetzt noch mal was geändert und jetzt Funktioniert es wenigsten mit dem Einlesen.
Aber die Umlaute werden troz (UTF8ToSys(sFile)) nicht konvertiert.
for i := 0 to slFile.Count - 1 do
Begin
slRow.DelimitedText := slFile[i];
if StrToInt(Format('%3d',[i, slRow[0]])) > 0 Then
Begin
SatzN := slRow.Strings[0] + ' ' + slRow.Strings[1];
SatzD := slRow.Strings[2];
CSVInfoFeld := slRow.Strings[3];
if DatenBerechnung(SatzD,SatzN) Then
Datenuebertragen;
end;
end;
Vieleicht eine Idee?
Gruß
Zuletzt geändert von Lori am Di 2. Apr 2013, 11:03, insgesamt 1-mal geändert.
Grund:Bitte den richtigen Highlighter verwenden!
hbr hat geschrieben:Aber die Umlaute werden troz (UTF8ToSys(sFile)) nicht konvertiert.
Wie du dir vielleicht denken kannst, konvertiert diese Funktion vom Unicode-Zeichensatz in der UTF-8-Kodierung in den System-Zeichensatz und der dazugehörigen Kodierung (sofern abweichend). Wenn du das beim öffnen der Datei angibst, hat das auch nur Auswirkungen auf den Dateinamen, aber nicht auf den Dateiinhalt.
Dazu musst du 2 Dinge wissen oder Annahmen dazu treffen. Ohne diese kann dir niemand eine sinnvolle Antwort geben.
Zeichensatz der Eingabe (hier: Dateiinhalt; wo kommt die Datei her?)
Zeichensatz der Ausgabe (Betriebssystem-Konsole, LCL-Programm, Windows-/GTK-/QT-/Mac-Programm etc.)
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Naja, anhand von 'R#252'diger kann man schon sagen, dass die Quelle in Latin1 bzw. ISO 8859-1 bzw. Windows-1252 vorliegt.
Wenn du auf einem deutschen oder englischen Windows bist, kannst du SysToUTF8 auf die Inhalte anwenden, falls das Resultat in UTF-8 vorliegen soll.
Ansonsten den Code aus LConvEncoding verwenden.
theo hat geschrieben:... kannst du SysToUTF8 auf die Inhalte anwenden, falls das Resultat in UTF-8 vorliegen soll.
Ansonsten den Code aus LConvEncoding verwenden.
OK,OK,
das sagt mir jetzt garnix.
Also ich hatte die CSV-Datei mit Exel Standard CSV-Zeichen getrennt (Windows) erstellt.
Zu dem Zeitpunkt hatte ich den Export von Lazarus nach CSV noch nicht.
Wenn ich also die Windows(CSV) in (DBF) einlese fehlen die Umlaute.
Wenn ich von Lazarus eine CSV-Datei erstelle, fehlen die Umlaute (Hüroglüpfen) in Excel.
Was kann ich nun tun, damit beide gleich sind.
Bitte Verständlich erklären, wenn geht in Bezug auf TStrings.
Danke..
Socke hat schon recht, du musst wissen welcher Zeichensatz in welchem Target vorhanden sein soll.
Dann können wir dir ggf sagen, wie du die Umwandlung mit Lazarus bewerkstelligen kannst.
Mögliche (wahrscheinliche) Optionen sind: ANSI ISO 8859-1, UTF-8 oder UTF-16
Code, den du in Lazarus Controls (TEdit, TMemo....) oder in den Quelltext unter Lazarus eingibst, ist in UTF.8 (Standardeinstellung)
Hallo,
ist ja alles gut und schön, aber wo stelle ich das den ein? DBGRID oder?
Wenn ich ein Entwicklungstool für die Oberfläche Windows habe, dann soll es auch den Zeichensatz von Windows benutzen!
Das ist doch wohl Voraussetzung.
Das gleiche gilt dann für Unix.
Ich bin gerade bei Windows.
Wo kann man das den einstellen?
hbr hat geschrieben:Wo kann man das den einstellen?
Gar nicht.
Die LCL (d.h. alle Komponenten, die du auf ein Formular legst) arbeiten mit UTF-8. Das ist eine Design-Entscheidung der Entwickler. Die RTL arbeitet grundsätzlich mit dem Systemzeichensatz. Wenn du also eine Datei bearbeitest, arbeitest du mit der RTL und verwendest den Systemzeichensatz. Zeigst du Daten auf einem Formular an, müssen diese in UTF-8 kodiert sein, um korrekt dargestellt zu werden.
Davon unabhängig ist der Zeichensatz, den Lazarus für die Quelltext-Dateien verwendet.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein