Delphi-PRAXiS

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

gangs-taas 24. Aug 2009 17:10

Re: Problem mit PosEx
 
nein ich kopiere von meinem ersten wert bis zum zweiten

und das steht ja in der hilfe


[Delphi] function Copy(S: string; Index: Integer; Count: Integer): string;


also von index bis count


ich bekomme ja auch ein ergebnis zurück es hat nur irg. zu viele buchstaben

also beim zweiten mal bekomme ich glaub ich 2 buchstaben mehr als ich eigl. will ect.

Apollonius 24. Aug 2009 17:12

Re: Problem mit PosEx
 
count

gangs-taas 24. Aug 2009 17:13

Re: Problem mit PosEx
 
okay
ich benutz die funktion falsch

was schlagt ihr vor ?
wie kann ich das lösen ?

p80286 24. Aug 2009 17:16

Re: Problem mit PosEx
 
?????

Delphi-Quellcode:
copy(quelle,position1,(position2-position1)-1);

ggf -2 oder position1+1 oder ....

gruß
K-H

xZise 24. Aug 2009 17:19

Re: Problem mit PosEx
 
Ehrm, wie kriege ich die Anzahl zeigen zwischen zwei Punkten raus? Vielleicht durch die Subtraktion? p80286 hat es vorgemacht.

Code:
Text: T/Nix/T
Index: 1234567
Found: ^   ^
Nix sind 3 Zeichen und 6 bzw 2 sind die Indizes von den Schrägstrichen.

MfG
xZise

gangs-taas 24. Aug 2009 17:25

Re: Problem mit PosEx
 
vielen dank :-D


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