Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Problem mit PosEx (https://www.delphipraxis.net/139098-problem-mit-posex.html)

gangs-taas 23. Aug 2009 20:00


Problem mit PosEx
 
hey,
ich hab diesen code und möchte für S1_1 die stelle wo das erste '/' haben für S1_2 die Zweite Stell ect.
aber es funktioniert nicht
könntet ihr euch das mal angucken ?

hier ist mein code

Delphi-Quellcode:
  procedure Schnippeln (Stringlist : TStringlist ) ;
  var
  S1_1, S1_2 : Integer ;
  S2_1 , S2_2 : Integer ;
  S3_1 , S3_2 : Integer ;
  S4_1 , S4_2 : Integer ;
  i : Integer ;
  zähler : Integer ;
  begin
  zähler := 0;
  For i := 1 To Length(Stringlist.Text) do
    begin
      Zähler := PosEx(Stringlist.Text,'/', Zähler);
      case Zähler of
        1 : S1_1 := i;
        2 : S1_2 := i;
        3 : S2_1 := i;
        4 : S2_2 := i;
        5 : S3_1 := i;
        6 : S3_2 := i;
        7 : S4_1 := i;
        8 : S4_2 := i;
        end;
      inc(Zähler)
      end;
    end ;

danke schonmal

[edit=Matze]"PosExt" im Titel durch "PosEx" ersetzt, damit man über die Suche auch was findet. MfG, Matze[/edit]

xZise 23. Aug 2009 20:06

Re: Problem mit PosExt
 
Müsste das nicht umgedreht werden?

Delphi-Quellcode:
var
  p, idx : Integer;

idx := 0;
p := Pos('/', ...);
while p > 0 do
begin
  case Idx do
    // das was du da hast
  end;
  Inc(Idx);
  p := PosEx('/', ..., p + 1);
end;
Außerdem sucht Pos jetzt ob Stringlist.Text = '/' ist. Guck dir doch mal die Hilfe zu Pos(Ex) an. Zuerst SubStr dann Str und eventuell dann Offset.
Und dann bekommst du die Stelle im String. Und das muss keine Zahl zw. 1 und 8 sein!

MfG
xZise

gangs-taas 23. Aug 2009 20:12

Re: Problem mit PosExt
 
ups okay
danke :-D
gute nacht :-d

jbg 23. Aug 2009 20:20

Re: Problem mit PosExt
 
Noch ein Tipp: Lass die Umlaute aus den Variablennamen.

gangs-taas 23. Aug 2009 20:23

Re: Problem mit PosExt
 
ich seh gerade es ist doch nicht das was ich meine
also ich erklär ecuh mal was ich eigl. wollte.

ich wollte, dass er die erste Stelle von '/' sucht und sie S1_1 zuweist; die zweite stelle S1_2 ect.
damit ich später leicher mti copy das copieren kann was ich will

weil zwischen S1_1 und S1_2 steht dann der erste teil des textes den ich brauch Zwischen S2_1 und S2_2 der zweite und so weiter

könntet ihr mir helfen das zu bewerkstelligen ? :-D

lg :-D

jaenicke 23. Aug 2009 20:43

Re: Problem mit PosEx
 
Nimm einfach ein Array zur Speicherung der Positionen. ;-)

Und zum Suchen brauchst du doch kein Pos / PosEx, du brauchst doch nur jeweils den aktuellen Buchstaben zu vergleichen, da du alle Buchstaben durchgehst...

xZise 23. Aug 2009 22:29

Re: Problem mit PosExt
 
Zitat:

Zitat von gangs-taas
ich seh gerade es ist doch nicht das was ich meine
also ich erklär ecuh mal was ich eigl. wollte.

Genau das tut mein Code oben. Wenn auch jaenicke eigentlich recht hat.

Gehe einfach in deiner Schleife alle Zeichen durch (das tust du ja schon), und wenn jetzt das aktuelle Zeilen ein Slash ("/") ist, dann füge einen Eintrag ans dynamische Array an. Wenn dir nicht klar ist, was genau das ist guck dir doch mal ein Tutorial darüber an (z.B. das hier).

MfG
xZise

gangs-taas 24. Aug 2009 15:52

Re: Problem mit PosEx
 
doch ist mir klar

dein code hat nur irg. nicht funtkioniert ...

ja denke ich werde das ohne pos machen

danke :-D

gangs-taas 24. Aug 2009 16:53

Re: Problem mit PosEx
 
ihr müsst mir noch einmal helfen
ich hab das jetzt so gemacht

Delphi-Quellcode:
  procedure Schnippeln (Stringlist : TStringlist ) ;
  var
  ZeilenZahlen : Array[1..8] of integer ;
  i : Integer ;
  Prüfstring : String ;
  zaehler : Integer ;
  begin
    zaehler := 1;
    For i := 1 To Length(Stringlist.Text) do
      begin
        Prüfstring := Stringlist.Text[i];
        if Prüfstring = '/' then
          begin
            ZeilenZahlen[Zaehler] := i;
            inc(Zaehler);
          end;
        end;
    Startwoche := Copy(Stringlist.Text,(ZeilenZahlen[1]+1),(ZeilenZahlen[2]-1));
    ShowMessage(Startwoche);
    Intervall := Copy(Stringlist.Text,(ZeilenZahlen[3]+1),(ZeilenZahlen[4]-1));
    ShowMessage(Intervall);
    Tag := Copy(Stringlist.Text,(ZeilenZahlen[5]+1),(ZeilenZahlen[6]-1));
    ShowMessage(Tag);
    Text := Copy(Stringlist.Text,(ZeilenZahlen[7]+1),(ZeilenZahlen[8]-1));
    ShowMessage(Text);
    end ;
also meine idee war, dass ich heraus finde wo die '/' in meinem Text sind und ich dann geziehlt genau das zwischen ihnen heraus kopieren kann was ich brauche

ich vermute dass das Problem ist das er bei copy die 'enter' zeichen anders zählt als bei meinem "'/'-Find-code" wisst ihr wie ich das lösen kann ?

xZise 24. Aug 2009 17:02

Re: Problem mit PosEx
 
Schau dir mal am besten die Copy() Methode (z.B. in der Hilfe) an. Weil du benutzt sie nicht so richtig:
Zitat:

S ist ein Ausdruck des Typs String oder dynamisches Array. Index und Count sind Integer-Ausdrücke. Copy gibt einen Teilstring oder ein Teilarray zurück, das Count Zeichen oder Elemente ab S[Index] enthält.
Du hast aber zwei Indizes (so?) genommen.

MfG
xZise


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:53 Uhr.
Seite 1 von 2  1 2      

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