[gelöst] StringGrid Umlaute

Rund um die LCL und andere Komponenten
Antworten
VB_Lazarus
Beiträge: 85
Registriert: Do 23. Dez 2010, 19:10
OS, Lazarus, FPC: Windows 10 32/64bit, L 2.0.4 32bit, FPC 3.0.4 32bit
CPU-Target: 32Bit

[gelöst] StringGrid Umlaute

Beitrag von VB_Lazarus »

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
Zuletzt geändert von VB_Lazarus am Sa 21. Mär 2020, 12:06, insgesamt 1-mal geändert.

wp_xyz
Beiträge: 3367
Registriert: Fr 8. Apr 2011, 09:01

Re: StringGrid Umlaute

Beitrag von wp_xyz »

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;

VB_Lazarus
Beiträge: 85
Registriert: Do 23. Dez 2010, 19:10
OS, Lazarus, FPC: Windows 10 32/64bit, L 2.0.4 32bit, FPC 3.0.4 32bit
CPU-Target: 32Bit

Re: StringGrid Umlaute

Beitrag von VB_Lazarus »

Danke, für die schnelle Antwort.

Das scheint der beste Weg zu sein.

Gruß

Antworten