Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Strings rückwärts "gehen" (https://www.delphipraxis.net/57140-strings-rueckwaerts-gehen.html)

Tigermoon 16. Nov 2005 13:04


Strings rückwärts "gehen"
 
Hallo

Ich versuche ein paar strings von der gefundene stelle rückwaärts zu gehen
warum geht das nciht?

könnte mir da mal bitte jemand helfen?

Delphi-Quellcode:
procedure TFMain.Datei_durchsuchen;
var
  zaehlen, top, j, i, found:integer;
  Shandling, Suser_time, Scode_letter, Sreturn_code: string;
begin

  found := 0;
  zaehlen := 1;
  top := 60;

      for I := 0 to my_file.Count - 1 do
        begin
          // Jede Zeile nach dem Benutzernamen durchsuchen
          found := Pos('java.lang.String userName="'+EUsername.Text+'",', my_file.Strings[I]);

          if found <> 0 then
          begin

            Suser_time := my_file.Strings[found - 32];  //<--- hier "LISTENINDEX ÜBERSCHREITET DAS MAXIMUM (-31)"
            for J := 0 to 19 do Suser_time := Suser_time + Suser_time[J];
            Ldatum_out[zaehlen].Caption := Suser_time;
            Ldatum_out[zaehlen].Top := top;
            Ldatum_out[zaehlen].Width := Ldatum.Width;
            Ldatum_out[zaehlen].left := Ldatum.left;

          end;
          top := top + 40;
          zaehlen := zaehlen + 1;
      end;
end;
es ist von der datei her so das sie bei [2] mit einträgen anfängt
[0] und [1] sind leer
und der gefundene eintrag (nach dem ich suchen muss) ist immer bei [34]

Tigermoon

Angel4585 16. Nov 2005 13:11

Re: Strings rückwärts "gehen"
 
1. Was ist für ein Typ "my_file" TStringList? TStrings?
2. probier mal anstatt
Delphi-Quellcode:
for i:= 0 to x do
Delphi-Quellcode:
for i:= x downto 0 do

Tigermoon 16. Nov 2005 13:15

Re: Strings rückwärts "gehen"
 
Zitat:

Zitat von Angel4585
1. Was ist für ein Typ "my_file" TStringList? TStrings?
2. probier mal anstatt
Delphi-Quellcode:
for i:= 0 to x do
Delphi-Quellcode:
for i:= x downto 0 do

in dem teil gehe ich die buchstaben durch
die zeile setze ich in der zeile obendrüber fest

bei
Delphi-Quellcode:
Suser_time := my_file.Strings[found - 32];
ist der fehler

es ist eine tstringlist!!!

mr47 16. Nov 2005 13:19

Re: Strings rückwärts "gehen"
 
Zitat:

Zitat von Tigermoon
bei
Delphi-Quellcode:
Suser_time := my_file.Strings[found - 32];
ist der fehler

Der da wäre?

Tigermoon 16. Nov 2005 13:20

Re: Strings rückwärts "gehen"
 
Listenindex überstreitet maximum (-31)

mr47 16. Nov 2005 13:23

Re: Strings rückwärts "gehen"
 
Zitat:

Zitat von Tigermoon
Listenindex überstreitet maximum (-31)

Das bedeutet das du einen Index angesprochen hast, den es nicht gibt. -32 gibt's wohl nicht mehr! Normalerweise sind die Indizes positiv! Ich seh jetzt grad net wie groß "found" ist!
Der letzte Index ist normalerweise

TStringlist.Count-1;

mfg mr47

Ultimator 16. Nov 2005 13:26

Re: Strings rückwärts "gehen"
 
Delphi-Quellcode:
Suser_time := my_file.Strings[found - 32];
Logisch, dass du da nen Fehler kriegst. ;)
Mit my_file.Strings[bla] erhältst du das, was in Zeile Nummer bla - 1 steht.
Du durchsuchst die einzelnen Zeilen mit Pos() nach deinem String.
Du müsstest also oben genannte Zeile durch
Delphi-Quellcode:
Suser_time := myFile.Strings[i][found - 32]
Mit [ i ] hast du die Zeile i und mit [found-32] hast du das Zeichen, das an Stelle found - 32 steht.

Dann müsste das klappen.

Allerdings vermute ich mal, dass Suser_time nicht nur ein Zeichen beinhalten soll, sondern einige Zeichen von found - 32 an gezählt, oder?
In dem Fall müsstest du mit Delphi-Referenz durchsuchencopy arbeiten

Tigermoon 16. Nov 2005 13:59

Re: Strings rückwärts "gehen"
 
die lösung war

eine andere art von suche benutzen
nd zwar my_file.indexof(..)
dann kann man vorwärts und rückwarts

Delphi-Quellcode:
procedure TFMain.Datei_durchsuchen;
var
  zaehlen, top, j, i, found:integer;
  Shandling, Suser_time, Scode_letter, Sreturn_code, temp: string;
begin

  found := 0;
  zaehlen := 1;
  top := 60;

      while zaehlen <= 1 do
      begin
          // Zeilen nach dem Benutzernamen durchsuchen
          found := my_file.IndexOf('java.lang.String userName="'+EUsername.Text+'",');

          if found <> 0 then
          begin

            Temp := my_file.Strings[found - 32];
            for J := 1 to 19 do Suser_time := Suser_time + Temp[J];
            Ldatum_out[zaehlen].Caption := Suser_time;
            Ldatum_out[zaehlen].Top := top;
            Ldatum_out[zaehlen].Width := 130;
            Ldatum_out[zaehlen].left := Ldatum.left;
end;
          top := top + 40;
          zaehlen := zaehlen + 1;
      end;
end;
danke für euere hilfe

Tigermoon

Tigermoon 16. Nov 2005 14:01

tstringlist öfter durchlaufen
 
hallo

wie kann ich eine tstringlist mit dem befeht indexof() öfter durchlaufen
weil das nachdem ich suche kann es mehrmals geben

habt ihr ne idee?

Tigermoon


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:20 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