Hallo,
ich benötige wieder einmal einen Denkanstoß.
Ich habe eine CSV Datei (CP1252 kodiert, Windows), die ich in ein Stringgrid mit der Funktion "Stringgrid.LoadFromCSVFile" einlesen möchte.
Nun zeigt er mir anstatt der Umlaute entsprechend das "?".
Was muss / kann ich machen, damit ich die Umlaute richtig in das Stringgrid bekomme.
Danke.
Gruß
Bleibt Gesund
[gelöst] StringGrid Umlaute
-
- Beiträge: 99
- Registriert: Do 23. Dez 2010, 19:10
- OS, Lazarus, FPC: Windows 10/11 32/64bit, L 3.2.0 32/64bit, FPC 3.2.2 32/64bit
[gelöst] StringGrid Umlaute
Zuletzt geändert von VB_Lazarus am Sa 21. Mär 2020, 12:06, insgesamt 1-mal geändert.
Re: StringGrid Umlaute
Ich mochte dieses eingebaute LoadFromCSVFile/SaveToCSVFile nie. CSV ist zwar einfach, es gibt aber viele Sonderfälle, die in so einer einfachen Prozedur nicht berücksichtigt sind. Entweder verwendest du eine Spezialkomponente wie TCSVDocument, oder, wenn deine Datei keine Sonderfälle wie "Zeilenumbruch innerhalb einer Zelle" enthält, würde ich die Datei einfach mit Hausmitteln einlesen. Das sind auch nur ein paar Zeilen (evtl noch weniger, wenn man die Rows-Eigenschaft des Grid benutzt):
Code: Alles auswählen
uses
LConvEncoding;
procedure TForm1.LoadFromCSV(const AFileName: String; AFieldSeparator: Char);
var
L: TStrings;
sa: TStringArray;
s: RawByteString;
i, j: Integer;
begin
L := TStringList.Create;
try
L.LoadfromFile(AFileName);
StringGrid1.RowCount := L.Count;
s := L[0];
sa := CP1252ToUTF8(s).Split(AFieldSeparator);
StringGrid1.ColCount := Length(sa);
for i := 0 to High(sa) do
StringGrid1.Cells[i, 0] := sa[i];
for j:=1 to L.Count-1 do
begin
s := L[j];
sa := CP1252ToUTF8(s).Split(AFieldSeparator);
for i := 0 to High(sa) do
StringGrid1.Cells[i, j] := sa[i];
end;
finally
L.Free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
LoadFromCSV('data.txt', ';');
end;
-
- Beiträge: 99
- Registriert: Do 23. Dez 2010, 19:10
- OS, Lazarus, FPC: Windows 10/11 32/64bit, L 3.2.0 32/64bit, FPC 3.2.2 32/64bit
Re: StringGrid Umlaute
Danke, für die schnelle Antwort.
Das scheint der beste Weg zu sein.
Gruß
Das scheint der beste Weg zu sein.
Gruß