Keresés

Új hozzászólás Aktív témák

  • P.H.

    senior tag

    válasz Rolly #1441 üzenetére

    Ha mindenképp a string végén van a 3 lebegőpontos, space-szel elválaszva, akkor haladj hátulról.

    var
    ..I,J,Pos: longint;
    ..Szam: array [1..3] of double;
    ..Data,Temp: string;
    ..begin
    ....data:='szin bela 0,0 0,0 0,0';
    ....for pos:=3 downto 1 do begin i:=length(data);
    ......while (i > 1) and (data <> ' ') do dec(i);
    ......temp:=copy(data,i+1,MAXLONGINT);
    ......szam[pos]:=strtofloat(temp);
    ......delete(data,i,MAXLONGINT); end; end;

    (ha a copy() vagy a delete() utolsó paramétere MAXLONGINT, akkor a string végéig fog másolni/törölni).

    Ha az sem igaz, hogy biztosan space-ekkel vannak elválasztva, akkor
    (data <> ' ') helyett mehet (datain ['0'..'9','.',',' ] ), akkor is törölni fogja az elválasztó karaktert.

    Arra viszont figyelj, hogy ha StrToFloat-tal konvertálod számmá, akkor angol Windows alatt . (pont) a tizedes-elválasztó, magyar alatt pedig ',' (vessző), különben leáll exception-nal. Érdemes így írni, amit írtam fentebb:
    ......try..szam[pos]:=strtofloat(temp);
    ......except for j:=1 to length(temp) do
    ........if temp[j] = '.' then temp[j]:=','
    ........else of temp = ',' then temp[j]:='.';
    ........try szam[pos]:=strtofloat(temp);
    ........except { ekkor hiba van, 2 pont vagy 2 vessző } end; end;

    Ekkor a pontokat lecseréli vesszőre és a vesszőket pontokra, és lemegy, mindegy, milyen nyelvű a Windows. Illetve nem teljesen, mert ha a Vezérlőpontban a tizedes-elválasztót átírták valami másra, akkor így jártak :)

    [mod]: csak normális kinézetű lesz lesz lassan...

    [Szerkesztve]

  • g4dg3t

    senior tag

    válasz Rolly #1441 üzenetére

    úgy szerinted nem jó ha poszal megkeresem az első pontot, s index-1től kopizok?
    Ha elofeltetelkent kikothetjuk, hogy a keresett resz elott nem fog ''.'' szerepelni a string-ben, akkor jo lehet ugy is. Tehat ''szin.ize bela.bigyo 0.0 0.0 0.0'' sornal gondot okozna.



    Jol ertem, hogy a Pos fv-t belepesi feltetelkent hasznalod? Az igy vegtelen ciklust kell, hogy okozzon. Postold azt a while ciklust, este megneznem.

    [Szerkesztve]

Új hozzászólás Aktív témák

Hirdetés