StringGrid LoadFromCSV Spalten ausblenden

Rund um die LCL und andere Komponenten
Antworten
Thandor
Beiträge: 153
Registriert: Sa 30. Jan 2010, 18:17
OS, Lazarus, FPC: Windows 10 64Bit/ lazarus 3.0 mit FPC 3.2.2 (32Bit + 64bit)
CPU-Target: 64Bit
Wohnort: Berlin

StringGrid LoadFromCSV Spalten ausblenden

Beitrag von Thandor »

Hallo,

ich habe ein StringGrid, welches ich mit einer CSV-Datei befülle (StringGrid1.LoadFromCSVFile(FileName, ';');). Das funktioniert so weit.

Aber nun möchte ich dynamisch einzelne Spalten ausblenden. Dazu habe ich folgende Funktion gefunden: StringGrid1.Columns.Items[x].Visible := FALSE;
Mein Problem ist, es scheint kerine Columns zu existieren.

ShowMessage('IntToStr(StringGrid1.Columns.Count)); Ergibt 0. Obwohl das Striggrid gut gefüllt ist. Wenn ich auf ein Column zugreifen möchte (StringGrid1.Columns.Items[x].Visible:=false;) dann bekomme ich auch die Meldung, dass der Index außerhalb der Grenzen liegt.

Wenn ich mit LoadFromCSV das StrigGrid befülle, müssten dann nich auch pro Spalte je ein Column-Objekt in StringGrid.Columns existieren? Oder verstehe ich hier was nicht?

liebe Grüße

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: StringGrid LoadFromCSV Spalten ausblenden

Beitrag von m.fuchs »

Nein, die Columns-Objekte werden nicht automatisch angelegt. Müsstest du selber im Designer machen oder per Quellcode, falls das CSV-Format nicht immer gleich ist.
Du kannst aber auch so jederzeit eine Spalte ausblenden:

Code: Alles auswählen

StringGrid1.ColWidths[2] := 0;
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Thandor
Beiträge: 153
Registriert: Sa 30. Jan 2010, 18:17
OS, Lazarus, FPC: Windows 10 64Bit/ lazarus 3.0 mit FPC 3.2.2 (32Bit + 64bit)
CPU-Target: 64Bit
Wohnort: Berlin

Re: StringGrid LoadFromCSV Spalten ausblenden

Beitrag von Thandor »

Hallo,

danke für deine Antwort. Ich würde die Zeilen gerne wirklich ausblenden in der hoffnung, dass diese dann nicht mehr vom Programm berechnet werden. Die CSV-Datei kann manchmal sehr groß werden > 20k Zeilen. Mit einem "Hide" erhoffe ich mir Rechenzeit zu sparen.

Die Datein können unterschiedlich aufgebaut sein. Heißt also die Columns dynamisch erstellen...
Gibt es hierfür eine Anleitung, wie mann dies machen muss? Komme in Googel gerade nicht auf das richtige Ergebnis.

Wenn ich für jede Spalte eine Column hinzufüge ist anschließend die gasammte Tabelle überschrieben.

Code: Alles auswählen

 
for i := 0 to CSV_View_Unit.Form2.StringGrid1.ColCount-1 do begin
    Form2.StringGrid1.Columns.Add;
 end;   
 


Ich gehe mal davon aus, dass ich die Columns mit den Daten im StringGrid verknüpfen muss? Aber Wie?
(Denn "StringGrid1.Cols[1].Strings[0]" gibt dennoch den richtigenn Wert zurück.)

liebe Grüße

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

Re: StringGrid LoadFromCSV Spalten ausblenden

Beitrag von wp_xyz »

Am einfachsten kann man eine CSV-Datei mit einer StringList einlesen (StringList.LoadfromFile(..)). Man muss die Datei Zeile für Zeile durchgehen und die Zeilen mit Hilfe der String-Helper-Funktion .Split() am Spaltentrennzeichen auftrennen. Das beigefügte Demo-Programm zeigt dies anhand einer einfachen Test-Datei. Es wird angenommen, dass in der 1.Zeile die Spaltenbeschriftungen stehen und nach dem Einlesen der 1.Zeile die Anzahl der Spalten bekannt ist. Das Programm verwendet gleich Grid-Columns, so dass du die unerwünschten per Visible = false ausblenden kannst.

Allerdings hat ein StringGrid den Nachteil, dass die komplette Datei auf einmal eingelesen wird, was bei SEHR großen Dateien ein Problem werden kann (aber dann hat man mMn eh schon verloren). Alternativ kann man statt einer StringListe eine normale Pascal Text-Datei nehmen und die Datei Zeile für Zeile einlesen, Rest wie oben.

Alternativ könnte man auch den TCSVParser nehmen (unit csvReadWrite), der nur immer so viel einliest wie nötig. Dazu gibt es ein Beispiel im wiki: https://wiki.lazarus.freepascal.org/Csv ... StringGrid.
Dateianhänge
csv_columns.zip
(2.78 KiB) 88-mal heruntergeladen

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: StringGrid LoadFromCSV Spalten ausblenden

Beitrag von m.fuchs »

Thandor hat geschrieben:Ich würde die Zeilen gerne wirklich ausblenden in der hoffnung, dass diese dann nicht mehr vom Programm berechnet werden.

Was meinst du mit "berechnet"? Benutzt dein Programm die Daten aus jeder Zelle um damit Berechnungen anzustellen?
In diesem Falle wird dir das Hide nichts helfen, da die Spalten zwar nicht angezeigt werden, aber trotzdem noch da sind.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Antworten