![]() |
Speicherstelle und StringGrid
Moin Moin,
ich habe im moment einen kleinen Hänger und komme da nicht weiter, ich lese aus einer textdatei einen csv-text aus mit diesem code
Delphi-Quellcode:
aus und speicher diesen im StringGrid2
Screen.Cursor := crHourGlass;
csv := TStringList.Create; csv.LoadFromFile('artikel_shop_' + StringGrid1.Cells[2,stringgrid1.row] + '.txt'); StringGrid2.Rowcount := csv.Count; for ccc2 := csv.Count - 1 downto 1 do begin AnzTokens := Explode(A, ';', csv.Strings[ccc2]); for i := 0 to AnzTokens -1 do begin ccc := ccc+1; if ccc < 2 then begin StringGrid2.Cells[ccc, ccc2] := A[i]; end; if ccc = 21 then begin ccc := -1; end; end; end; Screen.Cursor := crDefault; Explode zerlegt hierbei die ; getrennten text in seine bestandteile das ganze funktioniert auch, allerdings ist mein problem dabei die zeit bis dies alles eingelesen ist (davon allerdings nur der artikelname und die artikelID) und auch die programmlast von 100% über ca 1 Minute bei ca 1800 Zeilen und einer dateigröße von ca 2,3 MB und das möchte ich vermeiden wenn ich alles ins Grid schreibe dann hört das programm gar nicht mehr auf mit der systemlast und hängt bis ich es abschieße habt ihr da ideen wie ich das besser lösen kann ach ja D5 habe ich |
Re: Speicherstelle und StringGrid
Moin Nisbo,
die Geschwindigkeit könntest Du so erhöhen (ungetestet)
Delphi-Quellcode:
dann wird das StringGrid nicht immer neu gezeichnet, bevor es gefüllt ist.
StringGrid2.Rows.BeginUpdate;
try // hier die Schleife finally StringGrid2.Rows.EndUpdate; end; Ausserdem noch ein Application.ProcessMessages in die Schleife einbauen. Z.B. direkt zu beginn der äusseren-Schleife. Statt des BeginUpdate/EndUpdate könntest Du auch den RowCount vor der Schleife auf 0, und nach der Schleife auf den gewünschten Wert setzen. Das könnte bei einem StringGrid den gleichen Effekt haben, da RowCount nur für die Anzeige der Zeilen interessant ist. |
Re: Speicherstelle und StringGrid
Zitat:
bei
Delphi-Quellcode:
bekomme ich nur die Info das bei StringGrid2.Rows.BeginUpdate ein [ erwartet wird aber ein . (Punkt) gefunden wurde, das tut es also leider auch nicht, hatte es auch schon mal mit ner prozedur ReadTabFile aus einem anderen board versucht (weiß nich tob ich hier den link dazu posten darf) die hat das StringGrid zwar schnell gefüllt aber dafür war alles nicht so geordnet und durcheinander
StringGrid2.Rows.BeginUpdate;
try // hier die Schleife finally StringGrid2.Rows.EndUpdate; end; momentan schaut mein Code jetzt so aus:
Delphi-Quellcode:
habe da noch eine Progressbar eingebaut, da siehst man das das ganze dann zum anfang schnell geht und dann zu ende hin immer langsamer wird
if FileExists('artikel_shop_' + StringGrid1.Cells[2,stringgrid1.row] + '.txt') then begin
Screen.Cursor := crHourGlass; csv := TStringList.Create; csv.LoadFromFile('artikel_shop_' + StringGrid1.Cells[2,stringgrid1.row] + '.txt'); StringGrid2.Rowcount := 0; ProgressBar1.max := csv.Count; for ccc2 := csv.Count - 1 downto 1 do begin AnzTokens := Explode(A, ';', csv.Strings[ccc2]); for i := 0 to AnzTokens -1 do begin ccc := ccc + 1; // Spalten-Position erhöhen if ccc < 2 then begin StringGrid2.Cells[ccc, ccc2] := A[i]; end; // testweise nur bei Titel und ID if ccc = 21 then begin ccc := -1; end; // wenn max Spalten erreicht Zähler wieder auf Spalte 0 setzen end; ccc3 := ccc3 + 1; ProgressBar1.Position := ccc3; end; StringGrid2.Rowcount := csv.Count; Screen.Cursor := crDefault; end; hast du eventuell noch eine andere idee wie man das ganze lösen könnte ? so wie es jetzt ist hat es nicht wirklich einen wert wenn schon ca 1800 Artikel das System für ca 1 Minute lahmlegen |
Re: Speicherstelle und StringGrid
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Jens,
schau dir mal meine Demo an. Da mir nicht alle Randbedingungen bekannt sind, kann es sein, dass du da und dort etwas nachbessern musst, aber eigentlich zeigt die Demo sehr schön, dass du auf Zeiten unterhalb einer Sekunde hoffen kannst. Grüße vom marabu |
Re: Speicherstelle und StringGrid
super das ging ja fix, danke vielmals :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz