Delphi-PRAXiS
Seite 4 von 8   « Erste     234 56     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Spaltenweise auf TStringList zugreifen (https://www.delphipraxis.net/137708-spaltenweise-auf-tstringlist-zugreifen.html)

Lannes 29. Jul 2009 06:46

Re: Spaltenweise auf TStringList zugreifen
 
Hallo,

mit der Taste F7 kannst Du Dein Programm im Einzelschrittmodus ausführen.
Befindet sich deine Maus im Codeeditor über einer Variablen wird Dir der aktuelle Inhalt angezeigt.

Das Tutorial von MaBuSe kann ich Dir empfehlen:
Tutorial: Debugging in Delphi für Anfänger und Fortgeschr.

aaaaaaaaaa_10 29. Jul 2009 07:08

Re: Spaltenweise auf TStringList zugreifen
 
Das wusste ich ja doch schon :-D Aber danke nochmal. Nuhn ist aber das Problem mit F7, dass er ja das komplette Programm durchlaufen will.Mich interessiert doch aber nur die aktuelle Unit.- Da sitz ich ja morgen noch und druck F7 :gruebel:

mkinzler 29. Jul 2009 07:15

Re: Spaltenweise auf TStringList zugreifen
 
Was spricht den gegen das Setzen eines Breakpoints?

aaaaaaaaaa_10 29. Jul 2009 07:18

Re: Spaltenweise auf TStringList zugreifen
 
Hab ich schon probiert,aber irgendwie ignoriert er diesen. Zumindestens fängt er trotz breakpoint immer wieder von vorne an

jaenicke 29. Jul 2009 07:23

Re: Spaltenweise auf TStringList zugreifen
 
Ja, wo soll das Programm sonst anfangen? Das ist ein Haltepunkt, also ein Punkt zum Anhalten. Heißt: Das Programm hält an, wenn es da ankommt.

Also setze den Haltepunkt, starte das Programm mit F9. Wenn jetzt das Programm dort ankommt, meldet sich Delphi und du kannst schrittweise durchgehen. Dabei würde ich eher F8 empfehlen, da du dann nicht in Funktionsaufrufe hineingehst. (Das musst du dann entscheiden was du willst.)

Du kannst auch mehrere Haltepunkte setzen, dann kannst du F9 drücken, dann läuft das Programm bis zum nächsten Haltepunkt.

Wenn das Programm gerade angehalten ist, kannst du mit Strg + F7 die markierte Stelle des Quelltextes, z.B, eine Variable auswerten und hineinschauen.

aaaaaaaaaa_10 29. Jul 2009 08:02

Re: Spaltenweise auf TStringList zugreifen
 
Tausden dank. Ich poste mal den Code:

Delphi-Quellcode:
procedure ZehnMinTimerEvent(Sender: TObject);
var
  Sek, Min, ZwSpeicher : TStringList;
  DreiSek, ZehnMin,Temp, temp1, temp2, DatUhr, Datei : string;
  TabPos, Spaltenanzahl, Zeilenanzahl,s, z : integer;
  StringArray: array of array of string;
  TestDatei : TFileStream;
begin
  DreiSek := extractfilepath(application.exename)+'Mom3sek_'+Kennung+'.txt';
  ZehnMin := extractfilepath(application.exename)+'Mom10min_'+Kennung+'.txt';
  TestDatei := TFileStream.Create(ExtractFilePath(application.exename)+'test.txt', fmCreate or
  fmOpenReadWrite);

  Sek := TStringList.Create;
  Min := TStringList.Create;
  ZwSpeicher := TStringList.Create;

  try
    Sek.LoadFromFile(DreiSek);
    Min.LoadFromFile(ZehnMin);

    temp1 := Sek.Strings[Sek.Count-1];  //letzte Zeile der 3SekDatei
    temp2 := Min.Strings[Min.Count-1];  //letzte Zeile der 10MinDatei

    while Min.Count >= 2 do  //maximal 1 Zeile + Header
      Min.Delete(1);

    if temp1 <> temp2 then
    begin
      TabPos := posEx(#9,temp1,13);
      if TabPos <> 0 then
      begin
        DatUhr := Copy(temp1,0,TabPos);   //Datum und Uhrzeit einfügen
        ZwSpeicher.Delimiter := #9;
        if Sek.Count >= 2 then      //ab der 1.Zeile + Header anfangen
        begin
          ZwSpeicher.DelimitedText := Sek.Strings[Sek.Count-1];

          Spaltenanzahl := ZwSpeicher.Count-2; //ohne Datum und Uhrzeit
          Zeilenanzahl := Sek.Count-1;        //ohne Header
          Setlength(StringArray,Spaltenanzahl,Zeilenanzahl);
          begin
            z := Zeilenanzahl-1;
            begin;
              for s := 0 to Spaltenanzahl-2 do
              begin
                StringArray[s,z] := ZwSpeicher.Strings[s+2];
                Temp := (StringArray[s,z]) + ';';
                TestDatei.Write(PChar(Temp)^,Length(Temp));
              end;
             StringArray[Spaltenanzahl-1,z] := ZwSpeicher.Strings[ZwSpeicher.Count-1];
             Temp := (StringArray[Spaltenanzahl-1,z]) + #13#10;
             TestDatei.Write(PChar(Temp)^,Length(Temp));
            end;
          end;
         end;
        Min.Add(DatUhr);
      end;
     Min.SaveToFile(ZehnMin);
    end;
  finally
    TestDatei.Free;
    ZwSpeicher.Free;
    Min.Free;
    Sek.Free;
  end;
end;
Ich denke, es sollte so fast stimmen. Allerdings wird immernoch nur eine neue zeile in die datei geschrieben und nicht wie gewollt die neue unter die alte gehängt

Satty67 29. Jul 2009 08:54

Re: Spaltenweise auf TStringList zugreifen
 
Nach dem Öffnen der Datei, den Dateizeiger ans Ende setzen?
Delphi-Quellcode:
TestDatei.Seek(0, soFromEnd);
Seek nochmal in der Hilfe nachschauen, hab' es aus der Erinnerung raus geschrieben.

Muss aber zugeben, das ich den Thread jetzt nur überflogen habe und evtl. am Thema vorbeiposte :oops:

aaaaaaaaaa_10 29. Jul 2009 09:09

Re: Spaltenweise auf TStringList zugreifen
 
:thumb: Danke, das wars. Klappt fast perfekt. Nochmal danke für eure geduld. :thumb:

aaaaaaaaaa_10 29. Jul 2009 09:29

Re: Spaltenweise auf TStringList zugreifen
 
Eine kleine Frage hätte ich noch.

Delphi-Quellcode:
 z := Zeilenanzahl-1;
            begin;
              for s := 0 to Spaltenanzahl-2 do
              begin
                StringArray[s,z] := ZwSpeicher.Strings[s+2];
                Temp := (StringArray[s,z]) + ';';
                TestDatei.Write(PChar(Temp)^,Length(Temp));
              end;
             StringArray[Spaltenanzahl-1,z] := ZwSpeicher.Strings[ZwSpeicher.Count-1];
             Temp := (StringArray[Spaltenanzahl-1,z]) + #13#10;
             TestDatei.Write(PChar(Temp)^,Length(Temp));
            end;
Es wird ja alle 3 Sekunden eine neue Zeile angehängt.Allerdings soll das nur geschehen, wenn sich die Zeilenanzahl verändert hat. Wie kann ich das Prüfen?

jaenicke 29. Jul 2009 09:34

Re: Spaltenweise auf TStringList zugreifen
 
Die Größe der Datei / die Anzahl der Zeilen in einem Feld oder einer Eigenschaft speichern und bei einer Änderung den Code durchführen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:17 Uhr.
Seite 4 von 8   « Erste     234 56     Letzte »    

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