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
Visual Basic 6 - altro probl nella ricerca di un testo
Forum - Visual Basic 6 - altro probl nella ricerca di un testo

Avatar
GrG (Member)
Guru^2


Messaggi: 3430
Iscritto: 21/08/2007

Segnala al moderatore
Postato alle 15:38
Martedì, 03/06/2008
Ciao!
Questo è un problema ricollegabile a quello di un post sempre fatto da me e sempre sullo stesso argomento...Allora:

Codice sorgente - presumibilmente VB.NET

  1. dim Ricerca as Integer
  2. dim C as integer
  3.  
  4. Private Sub Timer1_Timer()
  5. Ricerca = InStr(Ricerca, Text1.Text, Date)
  6. If Ricerca Then
  7. Text1.SelStart = (Ricerca - 1)
  8. Text1.SelLength = (InStr(Ricerca, Text1.Text, "~") - Ricerca) + 32
  9. If verifica = True Then
  10. C = Ricerca
  11. S = 4
  12. ElseIf verifica = False Then
  13. C = 1
  14. S = 0
  15. End If
  16.  
  17. If InStr(C, Text1.SelText, "CMD") > 0 Then
  18. Text1.SelStart = (Ricerca + InStr(C, Text1.SelText, "CMD") + 2)
  19. Text1.SelLength = (InStr(C, Text1.Text, vbCrLf)) - S
  20. msgbox text1.seltext
  21. If Len(Text1.SelText) = 1 Then '<--
  22. 'Boh
  23. End If
  24. '[Altro codice]
  25. else
  26. verifica = true
  27. '[Altro codice]
  28. end if
  29. Private Sub Form_Load()
  30. verifica = false
  31. end Sub



Allora, il codice forse è poco chiaro quindi ora spiegherò cosa deve fare. Prima di tutto il progr seleziona nella text1 un pezzo di testo per volta e si interrompe a ogni "~". Una volta selezionato vede se nel testo selezionato è presente la parola  
"CMD" se si seleziona il comando che viene dopo e lo esegue con la shell altrimenti se non trova CMD esegue altro codice che non ci interessa...

Lo scopo è che se trova CMD il programma deve eseguire il comando dopo (ke sarà un comando dos)
esempio:
CMD regedit.exe

Il progr come già detto seleziona il testo a "Blocchi". se CMD rientra nel primo "blocco" tutto OK. Se si esamina il primo blocco si esegue l'altro codice perchè non trovato CMD e poi si esamina il blocco con un comando quindi con presente CMD il progr lo esegue e tutto OK...
Il problema allora è che se il progr. a differenza di esguire direttamente il CMD al primo blocco, lo esegue al Secondo Non funziona + ma il valore text1.seltext non da + regedit.exe ma solo l'iniziale ("r")

So di aver fatto un macello con la spiegazione ma spero che abbiate capito...

quindi Come posso rimediare?

p.s. Ho provato a mettere un if ma dentro nn saprei che metterci...

Ultima modifica effettuata da GrG il 03/06/2008 alle 15:39
PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 16:08
Martedì, 03/06/2008
Non ho capito nulla ...

PM Quote
Avatar
GrG (Member)
Guru^2


Messaggi: 3430
Iscritto: 21/08/2007

Segnala al moderatore
Postato alle 18:16
Martedì, 03/06/2008
eh...me l'aspettavo una risp del genere, è un pò difficile da spiegare...

Allora:
Facciamo che la text1 contiene:

02/06/2008
Messaggio
~~~~~
02/06/2008
Messaggio2
~~~~~
[...]

Il mio codice (forse in quel pezzo non c'è) controlla la data del giorno poi la cerca nella text1 se la trova seleziona tutto fino a "~"
poi va avanti(andando x "blocchi") e così via...

quindi prima seleziona il primo blocco:

02/06/2008
Messaggio
~~~~~
02/06/2008
Messaggio2
~~~~~

Poi seleziona il secondo e così via...

02/06/2008
Messaggio
~~~~~
02/06/2008
Messaggio2
~~~~~

se non trova nel "Messaggio" CMD esegue una certa operazione che non ci interessa...
ma se c'è CMD seguito da un comando dos come nell'esempio:

02/06/2008
CMD regedit.exe
~~~~~
02/06/2008
Messaggio2
~~~~~

Se trova nel "blocco" selezionato CMD esegue il comando che segue dopo. Però a volte ci sono dei "Difetti". Infatti funziona per metà cioè
se c'è solo:

02/06/2008
CMD regedit.exe
~~~~~
02/06/2008
Messaggio2
~~~~~

cioè se già all'inizio al primo "blocco" trova CMD
lo esegue correttamente.
Se invece:

02/06/2008
Messaggio
~~~~~
02/06/2008
CMD regedit.exe
~~~~~

Seleziona il primo blocco senza trovare CMD esegue l'altra funzione. Poi passa al blocco successivo
dove trova CMD e anche qui funge tutto.

Però magari capita che la data del primo è scaduta e quindi indietro:

01/06/2008
Messaggio
~~~~~
02/06/2008
CMD regedit.exe
~~~~~

Allora il primo blocco non lo considera neanche perchè la data è scaduta(cioè vecchia). Allora passando al secondo che corrisponde alla data del momento trova CMD e cerca di eseguirlo ma dice File not Faund.
Infatti l'errore lo da la shell che cerca di aprire "r". Infatti viene selezionata solo la prima lettera perchè?

p.s. Spero di essermi spiegato meglio...
pp.s. Trovandosi al secondo blocco se metto C = 2 il comando risulta Shell regedit.exe (con l'accapo, ma basta mettere un al SelLength -2)
Quindi dovrei mettere tipo:
C = Blocco corrente

Ultima modifica effettuata da GrG il 03/06/2008 alle 18:23
PM Quote
Avatar
GrG (Member)
Guru^2


Messaggi: 3430
Iscritto: 21/08/2007

Segnala al moderatore
Postato alle 19:02
Martedì, 03/06/2008
Dopo ore a sbattere la capoccia c'è l'ho fatta
:D

PM Quote