(Delphi) Jak odczytać znak po znaku

0

Witam chciałem zrobić taki program który np. "przeparsuje" mi takie coś:

procedura = dane_do_odczytu_przez_program

albo takie coś

takafunkcja1 | takafunkcja2 { i zeby oddzielnie odczytalo po znaku |}

ale nie wiem jak to zrobic. Przeszukujac Google nie za wiele znalazłem :( Proszę o pomoc.

0

Możesz pojechać pętlą i sprawdzać każdy znak, albo użyć funkcji Pos, Copy oraz Delete
Póki co, nie za wiele wiemy, więc nie możemy za bardzo Ci pomóc.

0

Tylko że ja nie mogę zrobić tej pętli, zawsze jak zrobie "niby dobrze" to mi w ogóle omija ją.

0

wklej swój niedziałający kod

0

O teraz go nie mogę znaleźć, mam tego tyle, ale nic nie działa. Używam znak, tam jest dodawane do procedura, a petla jest zrobiona tak: while znak = ' ' do... wiem bez sensu dlatego wołam Was ale widzę że tu nie ma czego szukać...

0

procedura = dane_do_odczytu_przez_program

Type TDoubleResult = Array[0..1] Of String;
Function Get1(Str: String): TDoubleResult;
Var Str2: String;
Begin
 Str2 := Str;
 Delete(Str, 1, Pos('=', Str));
 Delete(Str2, Pos('=', Str), Length(Str2));
 Result[1] := Trim(Str);
 Result[0] := Trim(Str2);
End.

Najprostsze rozwiązanie.
Przykładowy kod:

{$APPTYPE CONSOLE}
Program Test;
Type TDoubleResult = Array[0..1] Of String;
Function Get1(Str: String): TDoubleResult;
Var Str2: String;
Begin
 Str2 := Str;
 Delete(Str, 1, Pos('=', Str));
 Delete(Str2, Pos('=', Str), Length(Str2));
 Result[1] := Trim(Str);
 Result[0] := Trim(Str2);
 //Ma być najpierw Result[1], a potem Result[0]
End.

Var Res: TDoubleResult;
Begin
 Res := Get1('procedura = dane_do_odczytu_przez_program');
 WriteLn(Res[0]);
 WriteLn(Res[1]);
 ReadLn;
End.
0

Wielkie dzięki teraz sprawdze czy działa ;)

0

takafunkcja1 | takafunkcja2 | inne rzeczy

Type TParams = Array Of String;
Function GetParams(Par: String; Sep: Char): TParams;
Var I  : Integer;
    P  : Integer;
    Str: String;
Begin
 SetLength(Result, 0);
 if (Trim(Par) = '') Then
  Exit;
 SetLength(Result, 1);       
 Str := Par;
 I   := 0;
 Delete(Str, Pos(Sep, Str), Length(Str));
 Result[0] := Trim(Str);
 While (Pos(Sep, Par) > 0) Do
 Begin
  Inc(I);
  SetLength(Result, I+1);
  P   := Pos(Sep, Par);
  Str := Par;
  Delete(Str, 1, P);
  Delete(Str, Pos(Sep, Str), Length(Str));
  Delete(Par, 1, P);
  Result[I] := Trim(Str);
 End;
End;

Fragment kodu mojego starego parsera (jak chcesz, to mogę wysłać Ci kod - 2773 linie :]).
Przykładowy kod:

{$APPTYPE CONSOLE}
Program Test;
Type TParams = Array Of String;
Function GetParams(Par: String; Sep: Char): TParams;
Var I  : Integer;
    P  : Integer;
    Str: String;
Begin
 SetLength(Result, 0);
 if (Trim(Par) = '') Then
  Exit;
 SetLength(Result, 1);       
 Str := Par;
 I   := 0;
 Delete(Str, Pos(Sep, Str), Length(Str));
 Result[0] := Trim(Str);
 While (Pos(Sep, Par) > 0) Do
 Begin
  Inc(I);
  SetLength(Result, I+1);
  P   := Pos(Sep, Par);
  Str := Par;
  Delete(Str, 1, P);
  Delete(Str, Pos(Sep, Str), Length(Str));
  Delete(Par, 1, P);
  Result[I] := Trim(Str);
 End;
End;

Var Res: TParams;
    I: Integer;
Begin
 Res := GetParams('Hello|World|!', '|'); 
 For I := 0 To High(Res) Do
  WriteLn(Res[I]);
 (* Wyświetli:
Hello
World
!
 *)
 ReadLn;
End.

:)

1 użytkowników online, w tym zalogowanych: 0, gości: 1