Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Ricerca Stringa In Text Multiline 2 [VB o C#]
Forum - C# / VB.NET - Ricerca Stringa In Text Multiline 2 [VB o C#]

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
xProgrammer89x (Normal User)
Newbie


Messaggi: 14
Iscritto: 31/01/2013

Segnala al moderatore
Postato alle 11:37
Domenica, 03/02/2013
Salve, apro questo post per chiedere un aiuto, o consiglio su come fare un'operazione, stavolta con alcuni aggiornamenti.

Dunque, ho completato un database di parole, ed un altro di corrispondenti id univoci, usando l'ordinatore per riscriverli in ordine alfabetico, e crescente nel caso degli id, tutti in colonna però in 2 file .txt in locale, ai quali il programma farà riferimento.

Quello che starei cercando di creare, è come una specie di sistema di licenze.

Ogni file, ha però circa 250.000 parole al suo interno, e vorrei fare in modo che data in input una stringa, lui controlli uno dei 2 file txt, ad esempio quello di parole, e restituisca "è presente", o "non è presente".

Ho subito pensato di utilizzare l'algoritmo binario per far si che impieghi poco tempo a fare il controllo.

Ad esempio data la prima lettera della parola, lui accede al centro del .txt eliminando una delle due metà non interessate, e così andando, fino alla fine, e verrebbero intorno alle 10-20 iterazioni a seconda della presenza della parola.

Il ragionamento credo sia giusto, o almeno io non ho trovato alternative migliori.

Il problema è che so applicare questo sistema soltanto ai vettori, e non a file .txt, ma non la vedo difficile.

Qualcuno di voi più esperto può darmi qualche suggerimento?

Ringrazio in anticipo.

Ultima modifica effettuata da xProgrammer89x il 03/02/2013 alle 11:38
PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 12:24
Domenica, 03/02/2013

con la ram a disposizione dei computer odierni, fai prima a mettere tutte le linee dei file (parole) in un HashSet e controllare con Contains se è presente o no. In realtà non si sacrifica più di tanto la memoria e lo speedup è ragguardevole in quanto l'operazione Contains è O(1).
Ti assicuro che è un buon metodo, l'ho implementato nel programmino per trovare le parole di ruzzle XD

PM Quote
Avatar
xProgrammer89x (Normal User)
Newbie


Messaggi: 14
Iscritto: 31/01/2013

Segnala al moderatore
Postato alle 13:10
Domenica, 03/02/2013
Testo quotato

Postato originariamente da HeDo:


con la ram a disposizione dei computer odierni, fai prima a mettere tutte le linee dei file (parole) in un HashSet e controllare con Contains se è presente o no. In realtà non si sacrifica più di tanto la memoria e lo speedup è ragguardevole in quanto l'operazione Contains è O(1).
Ti assicuro che è un buon metodo, l'ho implementato nel programmino per trovare le parole di ruzzle XD



Non ho ben capito cosa fare, e come fare, puoi spiegarmelo meglio?
Sei riuscito addirittura a trovare tutte le parole del gioco ruzzle?!
Come hai fatto, se oltre al vocabolario in questo caso il programma deve prima provare tutte le combinazioni di parole nella griglia?!

PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 15:40
Domenica, 03/02/2013
Testo quotato

Postato originariamente da xProgrammer89x:

Non ho ben capito cosa fare, e come fare, puoi spiegarmelo meglio?
Sei riuscito addirittura a trovare tutte le parole del gioco ruzzle?!
Come hai fatto, se oltre al vocabolario in questo caso il programma deve prima provare tutte le combinazioni di parole nella griglia?!



beh come fare a spiegarlo meglio?

Codice sorgente - presumibilmente C# / VB.NET

  1. // Ipotesi: la parola da controllare e il dizionario sono solo con lettere minuscole
  2.  
  3. // Creo e carico il dizionario delle parole
  4. HashSet<string> words = new HashSet<string>();
  5. words.AddRange(File.ReadAllLines("dictionary.txt"));
  6.  
  7. [...]
  8.  
  9. // Per controllare se una parola è nel dizionario
  10. if (words.Contains("ciao")) {
  11.     // Il dizionario contiene "ciao"
  12. }



Per quanto riguarda ruzzle la cosa è un po più complessa. Per quanto riguarda il controllo se una parola è nel dizionario è come ti ho fatto vedere, invece per l'estrazione delle parole dallo schema bisogna mettere su una ricerca (ricorsiva) esaustiva di tutte le combinazioni possibili.


PM Quote
Avatar
xProgrammer89x (Normal User)
Newbie


Messaggi: 14
Iscritto: 31/01/2013

Segnala al moderatore
Postato alle 16:46
Domenica, 03/02/2013
beh come fare a spiegarlo meglio?

Codice sorgente - presumibilmente C# / VB.NET

  1. // Ipotesi: la parola da controllare e il dizionario sono solo con lettere minuscole
  2.  
  3. // Creo e carico il dizionario delle parole
  4. HashSet<string> words = new HashSet<string>();
  5. words.AddRange(File.ReadAllLines("dictionary.txt"));
  6.  
  7. [...]
  8.  
  9. // Per controllare se una parola è nel dizionario
  10. if (words.Contains("ciao")) {
  11.     // Il dizionario contiene "ciao"
  12. }



Per quanto riguarda ruzzle la cosa è un po più complessa. Per quanto riguarda il controllo se una parola è nel dizionario è come ti ho fatto vedere, invece per l'estrazione delle parole dallo schema bisogna mettere su una ricerca (ricorsiva) esaustiva di tutte le combinazioni possibili.



Non sono riuscito a provare il codice, per il momento ci sto provando in C#, ma c'è un piccolo problema.

Il file .txt non si trova in locale, ma è caricato in rete, essendo un sistema di licenze, quindi all'interno del codice, dovrò specificare un link terminante col nome ed il formato del file contenente le parole, e quindi non so come procedere.

Una volta fatto questo, non mi rimarrà altro che scrivere la parte di codice, che data in input la parola, controlla se presente all'interno della lista.

Puoi darmi qualche altra dritta?

PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 18:23
Domenica, 03/02/2013

Per scaricare un file da remoto (o solo il suo contenuto) puoi usare la classe WebClient

http://msdn.microsoft.com/it-it/library/system.net.webclie ...

guarda in particolare i metodi DownloadString e DownloadFile

PM Quote
Avatar
xProgrammer89x (Normal User)
Newbie


Messaggi: 14
Iscritto: 31/01/2013

Segnala al moderatore
Postato alle 21:09
Domenica, 03/02/2013
Testo quotato

Postato originariamente da HeDo:


Per scaricare un file da remoto (o solo il suo contenuto) puoi usare la classe WebClient

http://msdn.microsoft.com/it-it/library/system.net.webclie ...

guarda in particolare i metodi DownloadString e DownloadFile



Ho studiato un po' i comandi, e sono riuscito a farlo, ma vorrei farlo senza scaricare nulla, e ci sono riuscito, c'è un però.

Ho usato il comando

Codice sorgente - presumibilmente C# / VB.NET

  1. if (webBrowser.DocumentText.Contains(TextBox.Text)) MessageBox.Show("Esiste");
  2. else MessageBox.Show("Non esiste");



ed è anche veloce.

Per testare ho fatto in modo che l'utente scrive all'interno di una text, la stringa in maiuscolo, da cercare all'interno della lista (la prima, con parole in maiuscolo)

Ho fatto vari test, e funziona tutto come deve, ho aperto lo stesso progetto su un altro computer, ed andandolo ad eseguire, il programma restituisce sempre "Non esiste", e non riesco a capire da cosa dipenda-

Cosa importante che ho notato, che sul secondo pc, il webbrowser quando si collega al file .txt, visualizza le parole in minuscolo, mentre le dovrebbe visualizzare in maiuscolo, come sull'altro pc, perchè il file è fatto da sole parole scritte in maiuscolo.

Non sono quindi riuscito a capirne il motivo, ma è importante che lo risolva, altrimenti agli utenti che hanno questo stesso problema, il programma al controllo della licenza, darà sempre esito negativo.

Il secondo pc ha Seven 64 Bit, mentre il primo su cui funziona, Vista 32 Bit, non so se può importare.

Sai cosa può essere?

Ultima modifica effettuata da xProgrammer89x il 03/02/2013 alle 21:12
PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 12:23
Lunedì, 04/02/2013
ma che cavolo di senso ha scomodare un webbrowser?
ti ho postato quella classe che fa ESATTAMENTE quello che ti serve fare.
il webbrowser presenta tutta una serie di problemi che vanno dal fatto che in realtà è solo un wrapper managed di un componente COM, al fatto che bisogna gestire lo stato di avanzamento di caricamento della pagina, ai problemi di performances e alla memoria utilizzata.
mi spieghi che cosa ci vuole a scaricare il contenuto con DownloadString, dividerlo in stringhe con Split, inserirlo in un HashSet e chiamarci sopra Contains?
no perchè altrimenti che serve chiedere aiuto sul forum se tanto si fa di testa propria?

PM Quote
Avatar
xProgrammer89x (Normal User)
Newbie


Messaggi: 14
Iscritto: 31/01/2013

Segnala al moderatore
Postato alle 15:55
Lunedì, 04/02/2013
Testo quotato

Postato originariamente da HeDo:

ma che cavolo di senso ha scomodare un webbrowser?
ti ho postato quella classe che fa ESATTAMENTE quello che ti serve fare.
il webbrowser presenta tutta una serie di problemi che vanno dal fatto che in realtà è solo un wrapper managed di un componente COM, al fatto che bisogna gestire lo stato di avanzamento di caricamento della pagina, ai problemi di performances e alla memoria utilizzata.
mi spieghi che cosa ci vuole a scaricare il contenuto con DownloadString, dividerlo in stringhe con Split, inserirlo in un HashSet e chiamarci sopra Contains?
no perchè altrimenti che serve chiedere aiuto sul forum se tanto si fa di testa propria?



Prima di tutto, ti ringrazio per il tempo che mi stai dedicando.

Il problema è che non ho studiato .net a livello universitario, poichè lo sto facendo autonomamente, ma ho bene o male un po di esperienza in generale, con gli algoritmi basilari, ed ho fatto pratica con la pseudocodifica.

Ho capito come usare il DownloadString, e so come usare il Contains, ma non so dove devo scaricare la lista, se in una textbox multiline, o altro, e come inserirla in un HashSet, poichè non ne ho domestichezza.

Per quanto riguarda infine il comando Split, non so usarlo in maniera tanto elastica, in ogni caso, ricordo che le parole in lista, sono separate da uno "\n"

Insomma, per capire meglio, avrei bisogno di un esempio pratico in codice.

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo