Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [delphi] Accesso casuale e prelievo casuale di una stringa da un file

    ciao gente,
    mi dite come si fa a prelevare casualmente una stringa da una lista di stringhe in un file di testo?

    esempio:
    file.txt

    CIAO
    Pippo
    Lupo
    Cane
    Gatto
    Topo
    Cavallo

    grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    52
    a dir la verita saprei farlo in c dato che e' lunico linguaggio che conosco :-(
    cmq ti dico cosa dovresti fare... dovresti calcolare il numero di righe nel file di testo (che corrisponde al numero di '\n'+1) e quindi fare un comando che in C e la random che ti permetta di scegliere un numero a caso tra 0 e il numero di righe... cmq penso che questo lo sapessi gia...

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    200
    Si chiama random anche in delphi.
    Devi passargli un valore(n) di tipo intero,dopodichè ti restituirà un valore compreso tra 0 e n-1

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,288
    Usa la classe TStringList per gestire la lista di stringhe.

    Tale classe supporta il metodo LoadFromFile che permette di caricare una lista di stringhe separate da ritorni a capo da un file di testo specificando come parametro il percorso.

    Una volta caricate le stringhe, la proprietà Count ti restituirà il numero totale di stringhe.

    Questo numero (decrementato di 1) rappresenterà il valore massimo per la generazione del numero casuale, mentre il minimo sarà 0 (zero).

    Ti è già stato indicato in un thread passato come generare numeri casuali.

    Dopo aver generato il numero, accedi alla i-esima stringa e con essa fai quel che vuoi.

    Uno scheletro di esempio per creare e usare la classe...
    codice:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      SL: TStringList;
      n: Integer;
    begin
      SL := TStringList.Create;
      try
        SL.LoadFromFile('C:\Stringhe.txt');
        Randomize;
        n := RandomRange(0, SL.Count - 1);
        ShowMessage(SL[n]);
      finally
        SL.Free;
      end;
    end;
    Questo codice crea un'istanza di TStringList, carica un file di testo da disco, genera un indice casuale da 0 al numero di stringhe (-1) e usa tale indice per prelevare una stringa dall'elenco e visualizzarla in una casella di messaggio. Anche in caso di errori, grazie al costrutto try...finally, la memoria occupata dalla StringList viene comunque liberata tramite il metodo Free, preservando le risorse di sistema.

    Ulteriori informazioni sulle funzioni e le classi utilizzate le trovi sulla Guida.

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

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

  5. #5
    grazie la possibiltà di usare una TString lIt mi era nota dall'esperiwnza autodidatta:
    avevo già fatto una cosa del genere.

    michiedevo solo se ci fosse nn'opportunità di gestire diretamente un file invecee che un componente.

    ma va bene lo stesso.
    grazie.

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,288
    Originariamente inviato da Lyll0
    michiedevo solo se ci fosse nn'opportunità di gestire diretamente un file invecee che un componente.
    Non si tratta di un componente, bensì di una classe.

    Cosa intendi per gestire direttamente un file??

    E' possibile usare anche funzioni di apertura di un file, lettura di una linea, accesso sequenziale e casuale, ma si tratta di procedure e funzioni ereditate dal vecchio Pascal che sono, a mio avviso, meno eleganti ed intuitive rispetto all'uso della TStringList, soprattutto per le esigenze che hai scritto nel messaggio precedente.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  7. #7
    si infatti.

    grazie.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.