Newsgroup: it.comp.lang.visual-basic
Titolo: estrarre la prima parola da una stringa

Scusate l'ennesimo disturbo... ma..
come si fa ad estrarre la prima parola da una stringa contenente più parole
separate da spazio?
c'è una funzione specifica immagino
grazie a tutti e buon lavoro

spero! :-) mi scoccio di scrivere codice per risolvere problemi del livello
del turbo pascal :-)


--------------------------------
Inviato via 
http://usenet.libero.it

hem.. e la risposta? :-)


Svanita nelle larghe maglie della "rete"... ad ogni modo, quello che ti
interessa lo trovi sulla guida relativamente alle funzioni (in ordine
sparso)
InStr
Mid
Left
Split
Ciao
-- 
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown


scusa per l'errore ma ad un certo punto mi è scomparso tutto. Comunque il
tuo problema è molto semplice:
dim MiaStringa, StringaDiRicerca as String
dim Iter as Integer
...
  MiaStringa = Left(StringaDiRicerca,1)
...
nel caso vuoi eliminare gli spazi inizio e fine:
...
  MiaStringa = Left(Ltrim(Rtrim(StringaDiRicerca,1)))
nel caso che vuoi scandire tutta la stringa:
...
  for Iter = 1 to Len(StringaDiRicerca)
     MiaStringa = Mid(StringaDiRicerca,Iter,1)
  next Iter
Ciao, Roberto


c'è una funzione specifica immagino
Con Instr trovi la posizione del carattere che cerchi.
-- 
ciao, hal

ti amo! :-)
cosě mi estraggo tutte le lettere che precedono lo spazio.. :-)
grazie

cosě mi estraggo tutte le lettere che precedono lo spazio.. :-)
Se cerchi la prima parola e' sufficiente che trovi il primo spazio,
poi prendi tutto cio' che sta prima di esso con Left$.
-- 
ciao, hal


 Mmmm vediamo un pò...
 primaparola$=split(TuaStringa,space$(1))(0)
Ovviamente con tutti i controlli del caso!!!
Ciao


ho risolto con
UCase(Left$(txtCapo.Text, InStr(txtCapo.Text, " ") - 1))
mi serviva anche tutto maiuscolo :-)


 Scusa ma secondo me cosi fai prima poi fai come vuoi!
 primaparola$=split(TuaStringa,space$(1))(0)


 primaparola$=split(TuaStringa,space$(1))(0)
Tu allocheresti un array per trovare una parola !?!?!?
-- 
ciao, hal


  Be ha chiesto qualcosa che non lo facesse scrivere troppo e questo non lo fa
scrivere troppo.
Se avesse chiesto qualcosa che gli facesse risparmiare memoria allora si
poteva tentare un'altra strada.
Tutto sommato se la stringa che va a trattare non è molto grande non credo
che questa soluzione comporti grossi svantaggi in termini di occupazione di
memoria e velocità ( non verificato ma sarebbe interessante farlo ), mentre
ne porta in termini di semplicità nella scrittura del codice e rende
possibile una facile implementazione nel caso le parole interessate siano
più di una o, nel caso di una parola, non si trovi più al primo posto.


 UCase(Left$(txtCapo.Text, InStr(txtCapo.Text, " ") - 1))
piccola puntualizzazione da rompiballe (:-P): dato che lavori esclusivamente
con delle stringhe, usa UCase$ invece di UCase, dovrebbe essere più veloce.
ciao, assa.
--
gosclient: 
http://members.xoom.it/gosclient/
join the mailing list: 
http://groups.yahoo.com/group/gosclient/join

 poteva tentare un'altra strada.
Mi interessa questo raffronto ma non sono esperta e non ho visto dove si
chiede di non scrivere molto e poi nel caso si voglia risparmiare memoria?
graze e scusate se ho detto cose sbagliate.


memoria e velocità ( non verificato ma sarebbe interessante farlo ),
Ecco qua, non sono intervenuto a caso ;-)
16:       SenzaArray = Left$(s, InStr(s, " ") - 1)
0040187A   push        1
0040187C   push        dword ptr [s]
0040187F   push        offset ___vba@001BE30C (004013dc)
00401884   push        0
00401886   call        @__vbaInStr (0040119e)
0040188B   sub         eax,1
0040188E   jo          $L97+14h (004018d0)
00401890   push        eax
00401891   push        dword ptr [s]
00401894   call        @__vba@0019440C (004011a4)
00401899   mov         edx,eax
0040189B   lea         ecx,[SenzaArray]
0040189E   call        ___vbaStrMove (004011aa)
-------------------------------------------------
20:       ConArray = Split(s, " ")(0)
0040190E   and         dword ptr [ebp-64h],0
00401912   mov         dword ptr [unnamed_var1],2
00401919   mov         dword ptr [ebp-54h],offset ___vba@001BE30C
(004013dc)
00401920   mov         dword ptr [unnamed_var1],8
00401927   lea         edx,[unnamed_var1]
0040192A   lea         ecx,[unnamed_var1]
0040192D   call        @__vbaVarDup (00401180)
00401932   push        0
00401934   push        0FFh
00401936   lea         eax,[unnamed_var1]
00401939   push        eax
0040193A   push        dword ptr [s]
0040193D   lea         eax,[unnamed_var1]
00401940   push        eax
00401941   call        @__vba@001BE370 (00401186)
00401946   push        10h
00401948   pop         eax
00401949   call        VB@TEXT (004010f0)
0040194E   lea         esi,[unnamed_var1]
00401951   mov         edi,esp
00401953   movs        dword ptr [edi],dword ptr [esi]
00401954   movs        dword ptr [edi],dword ptr [esi]
00401955   movs        dword ptr [edi],dword ptr [esi]
00401956   movs        dword ptr [edi],dword ptr [esi]
00401957   push        1
00401959   lea         eax,[unnamed_var1]
0040195C   push        eax
0040195D   lea         eax,[unnamed_var1]
00401960   push        eax
00401961   call        @__vbaVarIndexLoad (0040118c)
00401966   add         esp,1Ch
00401969   push        eax
0040196A   call        ___vbaStrVarMove (00401192)
0040196F   mov         edx,eax
00401971   lea         ecx,[ConArray]
00401974   call        ___vbaStrMove (004011aa)
00401979   lea         eax,[unnamed_var1]
0040197C   push        eax
0040197D   lea         eax,[unnamed_var1]
00401980   push        eax
00401981   lea         eax,[unnamed_var1]
00401984   push        eax
00401985   push        3
00401987   call        ___vbaFreeVarList (004011b6)
0040198C   add         esp,10h
Per i pignoli: ho compilato in codice nativo e senza ottimizzazioni.
-- 
ciao, hal

MERD...
scusa la volgarità, ma il raffronto che hai fatto mi ha lascaito a bocca
aperta!
scusa, ma cosa lo utilizzi a fare il compilatore ?! :-)

Paolo C. wrote:

parola=left(stringa,instr(stringa,chr(32)))

 Ecco qua, non sono intervenuto a caso ;-)
Senza considerare il fatto che la stringa può essere moooooooooooooooooolto 
lunga.

 00401987   call        ___vbaFreeVarList (004011b6)
In definitiva la split è per i pigri (senza offesa, ovviamente, anch'io la
prediligo).
Usi il debugger di Visual C per disassemblare il compilato? Mi interessa per
verificare alcune pulizie di variabili che VB dovrebbe garantire ma che io
credo non avvengano (vedi set  a nothing di oggetti).
termoPilucco.

 livello del turbo pascal :-)
Se ci pensi bene, suddividendo i problemi in tanti piccoli sottoproblemi (e 
quindi tante piccole funzioni), ogni problema diventa un problema del 
livello del turbo pascal.

 parole separate da spazio?"
  Nel secondo post in cima al 3d Paolo C. ha scritto :
"...mi scoccio di scrivere codice per risolvere problemi del livello del
turbo pascal :-)"
 
E io ho provveduto a postargli una soluzione per "pigri", come ha detto
Termopilucco piů avanti ( eheheh ), che perň fosse facilmente modificabile
nel caso la parola non si trovasse piů al primo posto o fosse piů di una.
In ogni caso la tua analisi ( non ho quotato tutto il disassembalto per ovvi
motivi ) č stata molto interessate.


vedo che il mio post è stato interessante... sono contento :-)
cmq io credevo di dover scrivere un ciclo che mi cercasse il primo spazio e
mi scocciavo non per la lunghezza del codice (che in fondo è un semplice
loop) ma per il fatto che DOVEVA esistere una funzione atta al mio scopo :-)
cmq devo dire che siete davvero grandi.. ma cos'è qello che avete scritto?
assembly?

ma cosa lo utilizzi a fare il compilatore ?! :-)
In effetti forse sono piu' le volte che disassemblo che quelle che
compilo ;-)
-- 
ciao, hal

motivi ) č stata molto interessate.
Grazie, d'altra parte...
<cit>
Fatti, non pugnette!
</cit>
-- 
ciao, hal

credo non avvengano (vedi set  a nothing di oggetti).
Si', anche questo e' uno degli usi che ne faccio.
-- 
ciao, hal

assembly?
Si'.
-- 
ciao, hal

fammi capire bene?
cos'è sto debugger?
so he ora vi starete spoanciando dalle risate, ma pure se è un'utility di
visual basic io non l'ho mai utilizzata :-)
mi spieghi megli oa che serve? grazie!

 puoi installare, anche con OllyDbg puoi fare un lavoro egregio
A casa ho VC++, ma l'ho usato solo per pochi progetti personali.
Al lavoro magari proverò OllyDbg, visto che qui abbiamo solo VB.
Ciao,
termoPilucco