logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Delphi] Delphi: Jak sprawdzić, czy tekst z TEdit występuje w zmiennej typu string?

Wild_Master_Airborne 25 Lis 2010 21:40 3320 22
REKLAMA
  • #1 8789617
    Wild_Master_Airborne
    Poziom 13  
    Posty: 115
    Witam, Zaczynam programować w delphi i mam pytanie jak sprawdzić czy tekst wpisany w edit1 znajduje się w zmiennej znaki zdeklarowanej jako string?
  • REKLAMA
  • #2 8789700
    Dżyszla
    Poziom 42  
    Posty: 7075
    Pomógł: 1095
    Ocena: 224
    Porównaj własność Text tego obiektu ze zmienną przy użyciu funkcji if..then i operatora porównania =. Jeśli chcesz wyśledzić, czy tekst znajduje się gdzieś w środku zmiennej (czyli jest jej częścią) - skorzystaj z funkcji Pos.
  • REKLAMA
  • #3 8789773
    Wild_Master_Airborne
    Poziom 13  
    Posty: 115
    if edit1 = znaki then 
    ?
    W zmiennej jest zapisane wiele szyków znaków

    w formie

    xxxxxxxxx
    zzzzzzzzz
    yyyyyyyy

    itd.

    Ma to sprawdzić obojętnie które hasło pasuje, jeżeli jakiś szyk jest w zmiennej. Bo do zmiennej wczytuje plik txt.
  • #4 8789915
    Dżyszla
    Poziom 42  
    Posty: 7075
    Pomógł: 1095
    Ocena: 224
    Własność text!

    Jeśli chcesz tylko zwieranie się sprawdzić, to tak jak pisałem:
    If Pos(edit1.text,' '+znaki)>0 then
       Application.MessageBox('Znaleziono!','');
  • #5 8789935
    Szymon Tarnowski
    Poziom 27  
    Posty: 1292
    Pomógł: 61
    Ocena: 180
    Wild_Master_Airborne napisał:
    W zmiennej jest zapisane wiele szyków znaków

    w formie

    xxxxxxxxx
    zzzzzzzzz
    yyyyyyyy
    W takim razie dużo lepszym miejscem na przechowywanie "szyków" będzie tablica albo klasa tstrigs.
  • #6 8791074
    arnoldziq
    VIP Zasłużony dla elektroda
    Posty: 5376
    Pomógł: 789
    Ocena: 299
    Do autora tematu :
    Proszę dokładnie opisać, co chce kolega osiągnąć. Na podstawie tego, dość skąpego opisu, trudno jest wybrać jakąś rozsądną drogę postępowania.

    @Dżyszla:
    Trochę mnie to zastanawia, więc się zapytam : do czego ma służyć ta dodatkowa spacja w tym kodzie ?
    If Pos(edit1.text,' '+znaki)>0 then 
  • #7 8792193
    Wild_Master_Airborne
    Poziom 13  
    Posty: 115
    Chodzi o to, pobieram plik txt ze strony wpisuje go do zmiennej znaki, I chcę sprawdzić czy któryś z loginów został wpisany do edit1
    loginy są zapisne w txt tak
    xxxxxxx
    xxxxxxx
    xxxxxxx
    xxxxxxx
    itd...
  • #8 8792373
    Dżyszla
    Poziom 42  
    Posty: 7075
    Pomógł: 1095
    Ocena: 224
    @Arnoldzik_ - faktycznie, przesadziłem... nawyk związany z pewnym innym zgadnieniem.

    @wild... W takim razie należy rozwiązać to zupełnie inaczej. Wczytaj tekst do obiektu tylko TStringList (LoadFromFile), następnie tworzysz pętlę:
    
    znaleziono:=false;
    for i:=0 to StringList.Count-1 do
       if StringList[i]=edit1.Text then begin
           znaleziono:=true;
           break;
       end;
  • #9 8792628
    Wild_Master_Airborne
    Poziom 13  
    Posty: 115
    Nie zbyt mi to działa, możesz pokazać cały przykład?
    var
      znaki : String;
      SynHttp : THttpSend;
    
    begin
      SynHttp := THttpSend.Create;
      SynHttp.UserAgent := prze_UserAgent;
      SynHttp.HTTPMethod('GET', 'adres strony');
      SetLength(znaki,SynHttp.Document.Size);
      SynHttp.Document.Read(Pointer(znaki)^, Length(znaki));
      SynHttp.Free;
    
    
  • #10 8792662
    Dżyszla
    Poziom 42  
    Posty: 7075
    Pomógł: 1095
    Ocena: 224
    A to jakiś nietypowy masz odczyt danych. Jeśli już tak robisz, to przepisz zmienną znaki do własności Text obiektu klasy TStringList.
  • REKLAMA
  • #11 8792752
    Wild_Master_Airborne
    Poziom 13  
    Posty: 115
    Jak to zrobić? a dokładnie własność obiektu klasy Tstringlist?
  • #12 8792971
    Dżyszla
    Poziom 42  
    Posty: 7075
    Pomógł: 1095
    Ocena: 224
    http://zelota.netshock.pl/lazarus/Lazarus02.pdf (własności to to samo, co właściwości lub pola)
    Jeśli terminologia jest niezrozumiała, to polecam naprawdę zapoznać się z jakimiś podstawami programowania obiektowego - będzie łatwiej zrozumieć, co inni piszą.
  • #13 8793209
    Wild_Master_Airborne
    Poziom 13  
    Posty: 115
    Nie no znam, Próbowałem i nadal nie mogę tego zrobić nie działa no =( Możesz Napisać ten Warunek?
    Aha i Jeszcze jeden Problem
    Jak zrobić Jeśli login się nie zgadza to wyświetli komunikat
    Procedura loginu
    If .....
    else
    Panel1.Color := clRed;
    Panel1.Caption:='Incorrect Login';
    Procedura hasla
    if .....
    else
    Panel1.Color := clRed;
    Panel1.Caption:='Incorrect Password';


    Ale tak chyba działac nie bedzie w takiej formie?
  • #14 8793581
    Dżyszla
    Poziom 42  
    Posty: 7075
    Pomógł: 1095
    Ocena: 224
    Wild_Master_Airborne napisał:
    Nie no znam, Próbowałem i nadal nie mogę tego zrobić nie działa no =( Możesz Napisać ten Warunek?

    Dżyszla napisał:
    @wild... W takim razie należy rozwiązać to zupełnie inaczej. Wczytaj tekst do obiektu tylko TStringList (LoadFromFile), następnie tworzysz pętlę:
    
    znaleziono:=false;
    for i:=0 to StringList.Count-1 do
       if StringList[i]=edit1.Text then begin
           znaleziono:=true;
           break;
       end;
  • #15 8793786
    Wild_Master_Airborne
    Poziom 13  
    Posty: 115
    Nie wiem jak wczytać z zmiennej do stringlist?
    Stringlist.items.loadfromfile(znaki); tak nie działa bo w nawias wstawia sie lokalizacje pliku
  • #17 8793884
    Wild_Master_Airborne
    Poziom 13  
    Posty: 115
    Dokument pomocy wiele nie wniósł.

    Dodano po 6 [minuty]:

    Do tego trzeba użyć LoadFromStream
    Stringlist.items.LoadFromStream(Stream: TStream); virtual;
    lecz to nie działa błąd na StringList
  • #18 8794034
    Jaca
    Poziom 32  
    Posty: 1332
    Pomógł: 239
    Ocena: 216
    procedure TForm1.Button1Click(Sender: TObject);
    var
      Lista: TStrings;
      Petla: integer;
      Jest: boolean;
    begin
      Lista:=TStringList.Create;
      try
        with Lista do
        begin
          LoadFromFile('c:\test.txt');
          Jest:=False;
          for Petla:=0 to Count-1 do
            if Pos(Edit1.Text,Lista[Petla])>0 then
            begin
              Jest:=True;
              Break;
            end;
        end;
      except
      end;
      FreeAndNil(Lista);
    end;
    
  • #19 8794080
    Wild_Master_Airborne
    Poziom 13  
    Posty: 115
    W tym sęk ze te pliki nie mają byc zapisywane na dysku tylko w pamięci, po zamknięciu znikną

    Dodano po 27 [minuty]:

    Może mi ktoś napisać ten warunek na sprawdzenie czy zawartość Edit1. znajduje się w zmiennej znaki-string
  • #21 8794539
    Wild_Master_Airborne
    Poziom 13  
    Posty: 115
    Nie Pisałbym gdyby to działało. Ten Warunek Crashuje program, wyskakuje mi debuger
  • REKLAMA
  • #22 8794551
    Dżyszla
    Poziom 42  
    Posty: 7075
    Pomógł: 1095
    Ocena: 224
    Skąd masz ten kod w poście z 26 Lis 2010 18:46:06 ? Komponentu nie znam, ale może źle jest wykorzystywany? Sposób zapisu do zmiennej nasuwa skojarzenia z typem PChar a nie String...
  • #23 8795464
    Wild_Master_Airborne
    Poziom 13  
    Posty: 115
    Dobra, Zrobiłem to zupełnie inaczej za pomocą tablic i jest wszystko ok, mimo to dzięki za chęci pomocy =) temat do zamkięcia

Podsumowanie tematu

✨ W dyskusji poruszono problem sprawdzenia, czy tekst wprowadzony w komponencie Edit1 w Delphi znajduje się w zmiennej typu string, która zawiera wiele szyków znaków. Użytkownicy sugerowali użycie funkcji Pos do porównania tekstu oraz zalecili przechowywanie danych w obiekcie TStringList, co ułatwia operacje na listach. Wskazano również na konieczność wczytania danych z pliku tekstowego do TStringList oraz na problemy związane z odczytem danych. Ostatecznie autor tematu znalazł rozwiązanie, korzystając z tablic, co pozwoliło mu na skuteczne sprawdzenie loginów.
Wygenerowane przez model językowy.
REKLAMA