Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326

    [delphi] texbox .... array

    Ciao a tutti,

    avrei questo tipo di esigenza:

    devo fare una query, ed ho delle parole da ricercare. queste parole le inserisco in un texbox, quindi per prima cosa devo dividere il mio texbox in un array in cui tutti i valori da cercare

    es: texbox.text = 'antonio giuseppe anna'

    vorrei avere come risultato un array parole:

    parole[1]='antonio'
    parole[2]='giuseppe'
    parole[3]='anna'

    mi potete aiutare?
    grazie

  2. #2
    fai più attenzione ai titoli per favore

    05.08.2005 - by alka
    Auguri all'angelo custode dei moderatori.

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    scusa LadyBlu,.....come avrei dovuto scrivere?

    ho letto il messaggio di che sta sul forum....,
    chiedo scusa se ho sbagliato.....ma dove ho sbagliato?

    grazie

  4. #4
    Originariamente inviato da 123delphi321
    scusa LadyBlu,.....come avrei dovuto scrivere?

    ho letto il messaggio di che sta sul forum....,
    chiedo scusa se ho sbagliato.....ma dove ho sbagliato?

    grazie
    bastava pensarci un po' su, come ho fatto io modificandotelo.
    In futuro fai più attenzione, i titoli sono molto importanti.


    Per il tuo problema...
    io non conosco il delphi, però in VB esiste la funzione Split() che suddivide la stringa inserendola in un array.
    Per utilizzarla è necessario dichiarare un array di tipo string non dimensionato e poi scrivere semplicemente:
    codice:
    dim array() as string
    array() = Split(texbox.text, " ", -1, vbTextCompare)
    e poi per leggere il contenuto dell'array basta ciclarlo.

    05.08.2005 - by alka
    Auguri all'angelo custode dei moderatori.

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,464
    Puoi avvalerti delle funzioni di manipolazione delle stringhe incorporate nella RTL di Delphi, oppure gestire la cosa in modo più elegante: fornire un controllo TListBox che contenga tutte le parole da cercare; le parole vengono inserite all'interno di un TEdit e, tramite pressione di un pulsante TButton, vengono aggiunte all'elenco mostrato dalla ListBox.

    Io ho quasi del tutto abbandonato l'uso degli array in favore di liste, poichè vi sono già classi in grado di gestire questo tipo di strutture dati e non devo principalmente preoccuparmi di "allargare" il vettore e scrivere una marea di codice per inserirvi nuovi elementi.

    Ti aggiungo un esempio:
    codice:
    procedure TSearchForm.bbKeywordAddClick(Sender: TObject);
    begin
      // Aggiunge una keyword all'elenco
      if lbKeywords.Items.IndexOf(edKeyword.Text) <= -1 then
        lbKeywords.Items.Add(edKeyword.Text);
    end;
    
    procedure TSearchForm.bbKeywordDelClick(Sender: TObject);
    begin
      // Rimuove la keyword selezionata
      if lbKeywords.ItemIndex > -1 then
        lbKeywords.Items.Delete(lbKeywords.ItemIndex);
    end;
    
    procedure TSearchForm.bbExecuteClick(Sender: TObject);
    begin
      // Esegue la ricerca
      ...
    end;
    Il controllo lbKeywords rappresenta la ListBox contenente le parole chiave; i controlli bbKeywordAdd e bbKeywordDel sono i pulsanti TButton che permettono rispettivamente di aggiunge una parola chiave all'elenco e di rimuovere quella selezionata.
    Il controllo edKeyword è il TEdit che contiene la parola chiave da inserire mentre il pulsante bbExecute avvia la ricerca.

    L'elenco delle parole chiave da utilizzare puoi reperirlo dalla proprietà Items del controllo ListBox:
    codice:
      // reperisce la prima stringa
      ...lbKeywords.Items[0];
      // verifica il numero di stringhe inserite
      ...lbKeywords.Items.Count...
    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    certamente seguiro il tuo consiglio utilizzando il listbox.

    quanti elementi possono contenere le listbox?

    e poi, le RTL di delphi (Run Time Library ?)....dove sono, como posso vedere l'help?


    grazie

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    la soluzione del listbox, certamente e' valida, ma il mio problema e' quello di dividere una stringa in tutte le sue parole.

    ad esempio la seguente stringa: 'uno due tre'

    esiste una funzione che mi dice che ci sono 3 parole?

    cioe' che riconosce il numero di token e mi dica il token 1="uno"....?

    grazie

  8. #8
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,464
    Originariamente inviato da 123delphi321
    quanti elementi possono contenere le listbox?
    La capacità di una ListBox non si misura in numero di elementi ma più che altro nella dimensione del testo che li rappresenta; il tipo string può contenere fino a 2GB...direi che ce n'è "virtualmente" a sufficienza.

    Originariamente inviato da 123delphi321
    e poi, le RTL di delphi (Run Time Library ?)....dove sono, como posso vedere l'help?
    Scusami, con RTL (Run Time Library) mi riferivo all'insieme delle librerie di base cui appartengono le unit "Classes", "SysUtils", ecc.

    Nella Guida in linea, devi ricercare string manipulation routines per ottenere la trattazione di tutte le funzioni disponibili per la manipolazione delle stringhe.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  9. #9
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,464
    Originariamente inviato da 123delphi321
    la soluzione del listbox, certamente e' valida, ma il mio problema e' quello di dividere una stringa in tutte le sue parole.
    ad esempio la seguente stringa: 'uno due tre'

    esiste una funzione che mi dice che ci sono 3 parole?

    cioe' che riconosce il numero di token e mi dica il token 1="uno"....?
    Potresti sfruttare una funzionalità (per certi versi nuova, aggiunta a Delphi 7) della classe TStringList.

    La classe TStringList memorizza al proprio interno una lista di stringhe, rappresentate comunque sottoforma di stringa unica con ritorni a capo per separare i singoli elementi.

    La StringList possiede le proprietà Delimiter e DelimitedText che consentono di suddividere una stringa in più stringhe "virtuali".

    Spiego tutto con un esempio pratico:
    codice:
    procedure TDemoForm.bbTokenizeClick(Sender: TObject);
    var
      SL: TStringList;
    begin
      SL := TStringList.Create;
      try
        SL.Delimiter := ' ';
        SL.DelimitedText := edStrings.Text;
        lblTokenCount.Caption := IntToStr(SL.Count);
        lbxTokens.Items.Text := SL.Text;
      finally
        SL.Free;
      end;
    end;
    Questo codice viene richiamato alla pressione del pulsante che avvia il processo di interpretazione del testo allo scopo di contarne e suddividerne le parole.
    Viene creata un'istanza di TStringList: essa contiene internamente un testo (lungo fino a 2GB) che può essere letto e impostato attraverso la proprietà Text; se questo testo contiene dei ritorni a capo, essi vengono interpretati ed è possibile sfruttare questa elaborazione per vedere il testo nella sua interezza come una lista di "linee" di testo, separate appunto da ritorni a capo.
    E' possibile impostare il testo usando la proprietà DelimitedText, come illustrato sopra: in questo caso, la proprietà Delimiter di tipo Char deve contenere il carattere che rappresenta il "separatore", il quale verrà sostituito dal ritorno a capo per spezzarne il testo in più righe.

    Nell'esempio, il separatore viene impostato ad uno spazio vuoto, quindi viene assegnato alla proprietà DelimitedText il valore proveniente da una casella di testo TEdit (che magari contiene "uno due tre"); interpretando lo spazio come separatore, la StringList riempie la rappresentazione testuale interna con una stringa in cui il separatore è tramutato in ritorni a capo consentendo così di ispezionare le singole parole come elementi distinti; la proprietà Count determina il numero degli elementi caricati (3, in questo caso).
    Il numero degli elementi viene visualizzato in una Label mentre le parole vengono assegnate alla proprietà Items di una ListBox per la visualizzazione su schermo, ma era possibile ispezionare la singola parola scrivendo pure qualcosa simile all'esempio che segue:
    codice:
    procedure TDemoForm.bbTokenizeClick(Sender: TObject);
    var
      SL: TStringList;
      i: Integer;
    begin
      SL := TStringList.Create;
      try
        SL.Delimiter := ' ';
        SL.DelimitedText := edStrings.Text;
        for i := 0 to SL.Count - 1 do
          ShowMessage(SL[i]);
      finally
        SL.Free;
      end;
    end;
    Qui vengono visualizzate, una dopo l'altra, le singole parole all'interno di una finestra semplice di dialogo.

    Da notare come sia veramente ridotta la quantità di codice da scrivere.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    benissimo credo che questa e' la strada giusta....

    il testo nel tedit1.text, e' un testo che viene inserito da un utente, quindi non si sa quante parole ci possono essere.

    il mio fine e' quello di scrivere una query sql con parametri esterni.


    [#CODE]
    esempio dove text1 = "uno due tre":

    IBQuery1.SQL.Text := 'select * from tabella where nome like :ParParola1 and nome like :ParParola2 and nome like ParParola3';

    IBQuery1.ParamByName('ParParola1').AsString := '%'+SL[0]+'%';
    IBQuery1.ParamByName('ParParola2').AsString := '%'+SL[1]+'%';
    IBQuery1.ParamByName('ParParola3').AsString := '%'+SL[2]+'%';
    IBQuery1.Open;
    [#/CODE]


    pero', non sapendo quanti parametri passare....:

    [#CODE]

    for i := 0 to SL.Count - 1 do
    IBQuery1.ParamByName('ParParola1 ???????').AsString := '%'+SL[i]+'%';

    [#/CODE]

    ce' un metodo per rendere variabile la parola 'ParParola1'?

    grazeie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.