AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Speicherstelle und StringGrid

Ein Thema von Nisbo · begonnen am 30. Jul 2006 · letzter Beitrag vom 31. Jul 2006
Antwort Antwort
Nisbo

Registriert seit: 10. Mär 2005
191 Beiträge
 
Delphi 5 Standard
 
#1

Speicherstelle und StringGrid

  Alt 30. Jul 2006, 12:25
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:
    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;
aus und speicher diesen im StringGrid2
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
Jens
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Speicherstelle und StringGrid

  Alt 30. Jul 2006, 13:08
Moin Nisbo,

die Geschwindigkeit könntest Du so erhöhen (ungetestet)

Delphi-Quellcode:
StringGrid2.Rows.BeginUpdate;
try
  // hier die Schleife
finally
  StringGrid2.Rows.EndUpdate;
end;
dann wird das StringGrid nicht immer neu gezeichnet, bevor es gefüllt ist.

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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Nisbo

Registriert seit: 10. Mär 2005
191 Beiträge
 
Delphi 5 Standard
 
#3

Re: Speicherstelle und StringGrid

  Alt 30. Jul 2006, 16:54
Zitat von Christian Seehase:
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.
thx erstmal für den tipp, aber das hat es leider bnicht getan
bei

Delphi-Quellcode:
StringGrid2.Rows.BeginUpdate;
try
  // hier die Schleife
finally
  StringGrid2.Rows.EndUpdate;
end;
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

momentan schaut mein Code jetzt so aus:
Delphi-Quellcode:
  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;
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

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
Jens
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Speicherstelle und StringGrid

  Alt 30. Jul 2006, 17:54
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
Angehängte Dateien
Dateityp: zip sg-opt_204.zip (2,3 KB, 27x aufgerufen)
  Mit Zitat antworten Zitat
Nisbo

Registriert seit: 10. Mär 2005
191 Beiträge
 
Delphi 5 Standard
 
#5

Re: Speicherstelle und StringGrid

  Alt 31. Jul 2006, 07:11
super das ging ja fix, danke vielmals
Jens
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz