Ricerca in string

martedì 14 ottobre 2008 - 11.09

frenk17 Profilo | Junior Member

ciao ragazzi... ho bisogno di una dritta...
come faccio ad effettuare una ricerca su una stringa per verificare se al suo interno è presente una determinata parola
es

stringa1="cappuccetto rosso va ne bosco"
stringa2="cappuccetto rosso passeggia"
stringa3="cappuccetto rosso va dalla nonna"

supponendo che io voglia ricercare la parola "bosco".... come faccio?
grazie mille

Teech Profilo | Expert

Prova con
Dim v As Boolean = s.Contains("bosco")
dove 's' è la stringa e 'v' il valore booleano restituito.

Per operazioni più avanzate e dettagliate dei passare alle Regular Expression (RegEx)


--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole

rossimarko Profilo | Guru

Ciao,

se ti serve cercare una parola precisa allora puoi usare il metodo Contains (http://msdn.microsoft.com/en-us/library/system.string.contains.aspx)
Nel tuo caso basta fare:
If stringa1.Contains("bosco") then .. end if

Altrimenti se devi fare delle ricerche più complesse allora puoi sfruttare le regular expression: http://msdn.microsoft.com/en-us/library/hs600312.aspx

Edit: scusa Maurizio, non avevo visto la tua risposta
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

frenk17 Profilo | Junior Member

grazie a entrambi.... io ho utilizzato la soluzione di marco però ho un problema... non mi sostituisce la stringa... me ne scrive un altra con i valori aggiornati e corretti... solo che io ho la necessità di cancellare anche quella vecchia non aggiornata

aiedail92 Profilo | Expert

Ciao

Per aggiornare la String devi assegnare alla variabile il nuovo valore, perchè nel .Net Framework le String sono oggetti immutabili:

'Nel caso in cui la sostituzione debba essere case sensitive: Dim stringa As String = "cappuccetto rosso va ne bosco" stringa = stringa.Replace("bosco", "altro") 'Nel caso in cui la ricerca debba essere non case sensitive 'la cosa più semplice da usare sono le regex: Dim stringa As String = "cappuccetto rosso va nel bosco" stringa = Regex.Replace(stringa, "bosco", "altro", RegexOptions.IgnoreCase)

Non devi preoccuparti di eliminare la vecchia stringa, il Garbage Collector automatizza il lavoro di deallocazione della memoria quando è necessario.

Luca

frenk17 Profilo | Junior Member

ciao luca... ma il mio problema non è la deallocazione della memoria è eliminare la stringa da un file...
ti faccio vedere... questo è il mio file

nome cognome matricola data entrataM uscitaM entrataP uscitaP orarioNormale straod.(min) Ritardo(min)
francesco **** 123 14/10/2008 08.00 *** --- /// 08.00 0 0
francesco **** 123 14/10/2008 08.00 12.00 --- /// 08.00 0 0
francesco **** 123 14/10/2008 08.00 12.00 13.15 /// 08.00 0 0

praticamente io stò facendo un programma che si occupa della timbratura per gestire gli ingressi e le uscite per un azienda. in questo caso il dipendente francesco ha timbrato alle 08.00, alle 12.00 e alle 13.15.
il mio desiderio, se possibile, è veder stampata solo l ultima riga.. che è la più aggiornata sulle timbrature del dipendente .
spero di essere riuscito a spiegarmi

aiedail92 Profilo | Expert

Ciao

Non esiste un modo per eliminare una riga da un file, quello che devi fare è sovrascrivere i dati interessati e accorciare la lunghezza del file in modo da tagliar fuori i dati in eccesso. Per sovrascrivere i dati devi portarti alla posizione a cui iniziano i dati da sovrascrivere, mediante il metodo Seek di FileStream, per tagliare il file usi il metodo SetLength:

'Lo stream del file Dim fStr As New FileStream("C:\file.ext", FileMode.Open, FileAccess.ReadWrite) 'L'offset a cui iniziano i dati da modificare Dim offset As Integer 'Imposta la posizione dello stream all'inizio dei dati da sovrascrivere fStr.Seek(offset, SeekOrigin.Begin) 'i dati a scrivere (devi ottenerli dal file) Dim newData As Byte() 'Sovrascrive i dati fStr.Write(newData, 0, newData.Length) 'Accorcia la lunghezza del file all'offset dell'ultimo byte scritto fStr.SetLength(fStr.Position) 'Chiude il flusso fStr.Close()

Luca

aiedail92 Profilo | Expert

Ciao

Ho notato ora la struttura che hai dato al file:

Se mantieni dei caratteri per inserire gli eventuali orari seguenti, puoi facilitare di molto il lavoro: invece che riscrivere tutto dal punto in cui devi modificare ti basta sovrascrivere i byte dell'orario. Devi quindi lasciare per ciascun orario esattamente 5 caratteri (due per l'ora, uno per il punto e due per i minuti), in questo modo una volta portatoti con lo stream sulla posizione del nuovo orario non fai altro che sovrascrivere i ***** (o ----- ecc)

Luca
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5