(Delphi) Jak odczytać znak po znaku

Odpowiedz Nowy wątek
2011-08-30 14:35
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.


Programuje w Delphi ;)
edytowany 1x, ostatnio: Alvinek34, 2011-08-30 14:36

Pozostało 580 znaków

2011-08-30 14:41
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.


Raczej: On musi sobie sam pomóc, bo z opisu wynika że uważa się za programistę, a to zobowiązuje do wymyślania algorytmów i ich implementacji... - payl 2011-08-30 14:43
To, że mam podpis jako "Programuj w delphi" nie znaczy, że wszystko potrafię. - Alvinek34 2011-08-30 14:50
To, że masz taki podpis znaczy że coś umiesz, a to jest podstawa jakich mało. - payl 2011-08-30 14:56
Umiem: odczytać z rejestru, zapisać do rejestru, to samo z INI, korzystam z pętli, zmienne między programami. Naprawdę dużo wiem, korzystam z Google i wiele rzeczy znajduję, ale tej akurat nie znalazłem :( - Alvinek34 2011-08-30 14:59
Akurat to nie jest dużo ;) IMO, dużo, to umieć napisać najprostszy system operacyjny (oczywiście z wstawkami assemblerowymi), albo chociaż parser własnego języka programowania. - Patryk27 2011-08-30 15:04
Jak na mój rozum to dużo hehe :P - Alvinek34 2011-08-30 15:12

Pozostało 580 znaków

2011-08-30 14:49
0

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


Programuje w Delphi ;)

Pozostało 580 znaków

2011-08-30 14:50
0

wklej swój niedziałający kod


░█░█░█░█░█░█░█░█░█░█░█░

Pozostało 580 znaków

2011-08-30 14:57
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ć...


Programuje w Delphi ;)

Pozostało 580 znaków

2011-08-30 15:01

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.

edytowany 6x, ostatnio: Patryk27, 2011-08-30 15:11

Pozostało 580 znaków

2011-08-30 15:04
0

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


Programuje w Delphi ;)
Pisane z pamięci, ale powinno działać :) - Patryk27 2011-08-30 15:05
Dobra robota, wszystko działa, dzięki :P - Alvinek34 2011-08-30 15:13

Pozostało 580 znaków

2011-08-30 15:20
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.

:)


edytowany 5x, ostatnio: Patryk27, 2011-08-30 15:25
jak możesz to wyślij mi ten kod na [email protected] :P - Alvinek34 2011-08-30 16:01

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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