Autore Topic: regexp vediamo se ho capito qualcosa (non infamatemi troppo :D)  (Letto 3600 volte)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:regexp vediamo se ho capito qualcosa (non infamatemi troppo :D)
« Risposta #15 il: 08 Gennaio 2018, 16:52:18 »

Non voleva assolutissimamente essere una critica al tuo codice
Io notoriamente sono un coglione, ma in questo caso sapevo bene che, la tua, non era una critica.
Io stavo solo cercando di giustificare la velocità del procedimento di una funzione del Componente da te citato.
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:regexp vediamo se ho capito qualcosa (non infamatemi troppo :D)
« Risposta #16 il: 08 Gennaio 2018, 17:05:26 »

Non voleva assolutissimamente essere una critica al tuo codice
Io notoriamente sono un coglione, ma in questo caso sapevo bene che, la tua, non era una critica.
Io stavo solo cercando di giustificare la velocità del procedimento di una funzione del Componente da te citato.

Il fatto è che con questi specifici codici in una molto empirica misurazione il tuo codice estrae 7000 voci 20 volte più velocemente del mio  ;D

Quindi se tu sei quello che sostieni e scrivi codice che fa le stesse cose del mio in un ventesimo di tempo io come mi devo considerare  :mad:


nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline faustf

  • Gambero
  • **
  • Post: 87
    • Mostra profilo
Re:regexp vediamo se ho capito qualcosa (non infamatemi troppo :D)
« Risposta #17 il: 09 Gennaio 2018, 10:36:59 »
sto provando ad usare  scan applicato al mio problema ,  se non ho capito male  scan dovrebbe  fare un po come le regexp  array=scan("testto","regexp per cercare"), quindi ho messo il seguente codice giusto per vedere se avevo capito 
Codice: [Seleziona]
   
  Dim rMatch As String[]

    Shell "echo " & TextBox1.Text & " | sudo -S nmap -T4 -p3389 " & Getway & "/24 " To Result
    Print Result
    rMatch = Scan(Result, "Nmap")
    Print rMatch[0].Text
ma mi dice outofbound  dell array rMatch[0].Text , come senon trovasse nulla
è possibile???

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:regexp vediamo se ho capito qualcosa (non infamatemi troppo :D)
« Risposta #18 il: 09 Gennaio 2018, 11:12:32 »
è possibile???

Io direi che è certo  ;D
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:regexp vediamo se ho capito qualcosa (non infamatemi troppo :D)
« Risposta #19 il: 09 Gennaio 2018, 13:28:12 »
ma mi dice outofbound  dell array rMatch[0].Text , come senon trovasse nulla
è possibile???
...molto probabilmente stai usando male la sintassi di "Scan( )".

http://www.gambas-it.org/wiki/index.php?title=Scan
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline faustf

  • Gambero
  • **
  • Post: 87
    • Mostra profilo
Re:regexp vediamo se ho capito qualcosa (non infamatemi troppo :D)
« Risposta #20 il: 10 Gennaio 2018, 02:06:50 »
per non saper ne legere e ne scrivere , come si  dice dalle mie parti ho fato due cose
1 su un bottone  vuoto homesso l esempio da manuale
Codice: [Seleziona]
Public Sub Button2_Click()
 Dim s As String = "Scrivo una frase qualunque all'interno della quale devo trovare un riscontro"
  Dim ss As String[]
 
  ss = Split(s, " ")
  For Each s In ss
    If s Like "qual*" Then Print s
  Next



End
e  funziona
poi ho messo sul bottone  uno l esempio ma modificato leggermente (anche se non fa quello che deve fare solo per vedere se fa)
Codice: [Seleziona]
  Dim Result As String
  Dim GetwayIP As String
  Dim Getway As String
  Dim rMatch As String[]
  Dim rMatchPort As RegExp
  Dim IP As String
  Dim Element As Integer
 
 If TextBox1.Text = "" Then
    Message.Error("Errore devi inserire la pass di root se vuoi che funzioni, Ciao!")
    Else
    Shell "(/sbin/ip route | awk '/default/ { print $3 }')" To GetwayIP
    Getway = Trim(GetwayIP)
     'Print Getway & "/24 "
     'Print "echo " & TextBox1.Text & " | sudo -S nmap -T4 -p3389 " & Getway & "/24 "
     
    Shell "echo " & TextBox1.Text & " | sudo -S nmap -T4 -p3389 " & Getway & "/24 " To Result
    Print Result
    'rMatch = Scan(Result, "Nmap")
    'Print rMatch[0].Text
     rMatch = Scan(Result, "* * * * * *")
      For Each Result In rMatch
    Print Result
     Print Result[0].Text
   
  Next
   
   
    'rMatch.Compile("for\\d*.\\d*.\\d*.\\d*.\\d*", RegExp.MultiLine)
    'rMatch.Exec(Result)
   ' rMatch = New RegExp(Result, "for\\d*.\\d*.\\d*.\\d*.\\d*")
    rMatchPort = New RegExp(Result, "3389/tcp .*")
Print rMatch.Count

    For Each Element In rMatch
    ip = Left$(rMatch[Element].Text, -4)
   ' ip = Right$(ip, -1)
   
   
    If rMatchPort[Element].Text <> "3389/tcp closed ms-wbt-server" Then
       Print ip
    Endif
    Next

   ' Print ip & rMatchPort[0].Text
     
     
     
      'Print rMatch
  Endif
'
 

End

Public Sub Button2_Click()
 Dim s As String = "Scrivo una frase qualunque all'interno della quale devo trovare un riscontro"
  Dim ss As String[]
 
  ss = Split(s, " ")
  For Each s In ss
    If s Like "qual*" Then Print s
  Next


ma non va e mi da     Print Result[0].Text  not en object
qualche idea??? io le ho finite , ma solo prerchè è tarda l ora
:D
notte

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:regexp vediamo se ho capito qualcosa (non infamatemi troppo :D)
« Risposta #21 il: 10 Gennaio 2018, 02:46:37 »
ma non va e mi da     Print Result[0].Text  not en object


Gambas non ti sta semplicemente lanciando un avviso di errore: ti dice in via generale anche il tipo di errore.
Quindi ogni avviso va letto in modo opportuno e con attenzione.

Nello specifico Gambas ti sta dicendo che "Result" non è un "Oggetto", dichiarato e creato nel tuo codice e appartenente a una "Classe".

...ed infatti l'identificatore "Result" a cosa si riferisce ? Come lo hai dichiarato ?
« Ultima modifica: 10 Gennaio 2018, 03:02:59 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline faustf

  • Gambero
  • **
  • Post: 87
    • Mostra profilo
Re:regexp vediamo se ho capito qualcosa (non infamatemi troppo :D)
« Risposta #22 il: 10 Gennaio 2018, 10:24:25 »
  Dim Result As String

l' ho dichiaratocome stringa  all inizio

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:regexp vediamo se ho capito qualcosa (non infamatemi troppo :D)
« Risposta #23 il: 10 Gennaio 2018, 16:31:14 »
  Dim Result As String

l' ho dichiaratocome stringa  all inizio

Appunto.
In Gambas la variabile di un tipo fondamentale di dati ("atomico") non appartiene ad alcuna Classe, e pertanto non rappresenta alcun specifico Oggetto.
Dunque un tipo fondamentale di dati ("atomico") in Gambas non possiede Eventi, né Proprietà, né Metodi.


« Ultima modifica: 11 Gennaio 2018, 00:18:10 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline faustf

  • Gambero
  • **
  • Post: 87
    • Mostra profilo
Re:regexp vediamo se ho capito qualcosa (non infamatemi troppo :D)
« Risposta #24 il: 11 Gennaio 2018, 00:40:39 »
quindi come dovrei fare per stampare il contenuto di result ??
perche se metto print result mi dice solo  6

 :rolleyes: :rolleyes: :rolleyes: ??? ???

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:regexp vediamo se ho capito qualcosa (non infamatemi troppo :D)
« Risposta #25 il: 11 Gennaio 2018, 01:36:44 »
se metto print result mi dice solo  6

Ossia, il risultato in console di Print Result, posto dopo la linea di comando Shell "echo " & TextBox1.Text & " | sudo -S nmap -T4 -p3389 " & Getway & "/24 " To Result , e che dovrebbe corrispondere alle righe da te riportate nel tuo primo messaggio di questa discussione, è solamente il carattere del numero 6 ?

Io ho ripreso quelle tue righe del primo messaggio e le ho nuovamente inserite in un file di testo.
Quindi ho ricopiato parte del tuo ultimo codice:
Codice: [Seleziona]
Public Sub Main()

  Dim car, s As String
  Dim rMatch As String[]

   car = File.Load("/tmp/a")

  rMatch = Scan(car, "* * * * * *")
   
    For Each s In rMatch
      Print s
    Next

End
Ecco il risultato:

Starting
Nmap
7.01
(
https://nmap.org
) at 2018-01-07 15:45 CET
Nmap scan report for 192.168.1.1
Host is up (0.014s latency).
PORT     STATE  SERVICE
3389/tcp closed ms-wbt-server
MAC Address: 00:A0:A2:A9:32:C8 (Digicom)

Nmap scan report for 192.168.1.25
Host is up (0.14s latency).
PORT     STATE SERVICE
3389/tcp open  ms-wbt-server
MAC Address: 80:1F:02:8E:4F:9B (Edimax Technology)

Nmap scan report for 192.168.1.103
Host is up (0.18s latency).
PORT     STATE SERVICE
3389/tcp open  ms-wbt-server
MAC Address: 80:1F:02:8E:4F:9B (Edimax Technology)

Nmap scan report for 192.168.1.105
Host is up (0.44s latency).
PORT     STATE SERVICE
3389/tcp open  ms-wbt-server
MAC Address: 80:1F:02:8E:4F:9B (Edimax Technology)

Nmap scan report for 192.168.1.114
Host is up (0.21s latency).
PORT     STATE  SERVICE
3389/tcp closed ms-wbt-server
MAC Address: 30:10:B3:2A:18:33 (Liteon Technology)

Nmap scan report for 192.168.1.120
Host is up (0.17s latency).
PORT     STATE  SERVICE
3389/tcp closed ms-wbt-server
MAC Address: 10:60:4B:E0:B1:1C (Hewlett Packard)

Nmap scan report for 192.168.1.101
Host is up (0.00015s latency).
PORT     STATE  SERVICE
3389/tcp closed ms-wbt-server

Nmap done: 256 IP addresses (7 hosts up) scanned in 31.96 seconds


« Ultima modifica: 11 Gennaio 2018, 05:10:20 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline faustf

  • Gambero
  • **
  • Post: 87
    • Mostra profilo
Re:regexp vediamo se ho capito qualcosa (non infamatemi troppo :D)
« Risposta #26 il: 11 Gennaio 2018, 10:11:02 »
 :) hai ragione probabilmente facevo casino io  :2birre:

Offline faustf

  • Gambero
  • **
  • Post: 87
    • Mostra profilo
Re:regexp vediamo se ho capito qualcosa (non infamatemi troppo :D)
« Risposta #27 il: 11 Gennaio 2018, 10:34:07 »
la  domanda di fondo adesso è perchè
se io imposto come dic il wiki
   rMatch = Scan(Result, "Nmap scan report for *")
lui non  ritorna nulla? ??

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:regexp vediamo se ho capito qualcosa (non infamatemi troppo :D)
« Risposta #28 il: 11 Gennaio 2018, 15:08:45 »
La composizione della stringa, da passare al secondo paramentro della funzione Scan( ), deve tenere in considerazione comunque l'intera stringa di caratteri passata al primo argomento attuale della funzione.

Quindi, se la stringa è ad esempio:
 Gambas non è un clone di VB
nel secondo parametro dovrò tenere conto dell'intera frase, e quindi ad esempio fare una cosa di questo genere:
 
Codice: [Seleziona]
ss = Scan("Gambas non è un clone di VB", "*un clone*")
Laddove il primo metacarattere dell'asterisco farà riferimento (ingloberà) la parte "Gambas non è " (ossia dal primo carattere della stringa) , e il secondo asterisco farà riferimento a "di VB" (ossia fino all'ultimo carattere della stringa).
Va fatto rilevare che le parti della stringa, presenti in modo esplicito (i caratteri "un clone " del nostro esempio) nel secondo argomento, non vengono memorizzate nella variabile vettoriale restituita dalla funzione Scan( ).

Al termine avremo il vettore ritornato e istanziato con soli due elementi (...ovviamente corrispondenti ai due asterischi):
  ss[0] --> Gambas non è
  ss[1] --> di VB
« Ultima modifica: 11 Gennaio 2018, 18:05:25 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline faustf

  • Gambero
  • **
  • Post: 87
    • Mostra profilo
Re:regexp vediamo se ho capito qualcosa (non infamatemi troppo :D)
« Risposta #29 il: 11 Gennaio 2018, 21:58:53 »
una cosa  che non mi è chiara ,su  http://www.gambas-it.org/wiki/index.php?title=Scan , fa vedere solo pattern con l' *.   o *parle
la domanda è ma  regexp non  se le cag.... ??