27. september 2001 - 12:39Der er
7 kommentarer og 1 løsning
Hmm, lille fejl...
oki, det her en en procedure der skulle behandle en string der kommer ind... i den string er der nogle CRLF (er defineret som const) .. for hver af dem skulle den gerne dele op og skrive hver enkelt del af den sting ud seperat... (skal senere bruge det til at behandle enkelt dele af dem..) men den kan ikke helt finde ud af det.. der må tydeligvis være en fejl et sted.. SplitText kommer her til at indeholde \'tekst\' i første gennemløb \'tekst\'+crlf+\'tekst2\' i anden gennemløb, \'tekst\'+crlf+\'tekst2\'+crlf+\'tekst3\' i tredje.. osv osv ..
Jeg skal bare høre hvor min fejl er.. Når jeg kører debuggeren så hopper den noed over: TempInt := i+1;
Forstår jeg ikke helt.. jeg er da på det tidspunkt ikke inde i en løkke eller noed der \"låser\" TempInt, er jeg?
procedure TForm1.MisTreat(X: String); var TempInt : integer; i, j : integer; SplitText : String; begin ListBox1.Items.Add(X); for i := 1 to length(x) do begin TempInt := 1; if X[i-1] + X[i] = CRLF then begin for j := TempInt to i do begin SplitText := SplitText + X[j]; end; Memo2.Lines.Add(SplitText); TempInt := i+1; SplitText := \'\'; end; end; end;
Kommunerne har digitaliseret indgangen for borgerne. Men bag skærmen håndteres mange arbejdsgange stadig manuelt mellem systemer, mails og organisatoriske siloer.
Der er et eller andet helt galt med din splitter ... Jeg har en her der virker : Function ResolveNextToken(var s : String; Token : String) : String; var j : Integer; begin Result := \'\'; if s=\'\' then Exit;
j:= Pos(Token,s); if j <> 0 then begin dec(j); Result:=copy (s,1,j); Delete(s,1,j+ Length(Token)); end else begin Result:=s; s:= \'\'; end end;
Også er det bare at kalde den :
procedure TForm1.Button1Click(Sender : TObject) var s : String; begin s:= \'To heste gik over en mark men så blev der rødt\'; while s <> \'\' do Memo1.Lines.Add(ResolveNextToken(s, \' \')); end;
Grunden til at delphi springer: TempInt := i+1; over er at den kan se at resultatet TempInt bliver sat til en fast værdi i næste løkke. Det kan nogen gange godt virke lidt mærkelig når man støder på det første gang. Typisk vil denne linie slet ikke blive kompileret ind i den endelige kode (der vises ikke en prik i venstre margin). Hvis man slå optimize fra vil den udføre linien.
jhald >> Grunden til der er en While på er fordi min funktion ResolveNextToken kun tager den første Token af Strengen og skærer den af og retunerer den.
Altså førstegang du kalder funktionen med strengen \'To heste gik over en mark men så blev der rødt\' så retunerer den \'To\' og din streng er nu skåret end til \'heste gik over en mark men så blev der rødt\';
jhald>> Jo den skærer netop i den orginale streng ... Idet jeg får s ind som en var parameret :-)
Jens B
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.