Autore Topic: Parser piu' evoluto del like (oppure tricks & tricks con il like)  (Letto 472 volte)

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
salve ragazzi.
il problema di oggi e' quello di risucire a fare il parsing di un vettore di stringhe (che per la cronaca contiene questo):
Codice: [Seleziona]
100 VTR Ready
201 OK

4
0 "/mnt/Qnap1Multimedia/03_Playout/Artisti Oggi/01 artisti oggi ok 17-12-2009.mpg" 0 49329 49330 49330 25.00
1 "/mnt/Qnap1Multimedia/03_Playout/archivio video tg/a/acquedotto ok.mpg" 0 4194 4195 4195 25.00
2 "/mnt/Qnap1Multimedia/03_Playout/archivio video tg/a/agricoltura ok.mpg" 0 4803 4804 4804 25.00
3 "/mnt/Qnap1Multimedia/03_Playout/archivio video tg/a/albergo interni.mpg" 0 7703 7704 7704 25.00

al fine di individuare la riga che contiene il numero di files in coda (in questo caso quella con il 4) e poi le righe che contengono indicazioni sui singoli files in lista.

l'operatore like mi sembra un po' limitato,

per esempio come faccio a dirgli di controllare che la riga deve iniziare con un numero (arbitrariamente lungo) senza niente dopo?
Codice: [Seleziona]
 For Each stringa In Ritorno
    If stringa Like "[0-9]" Then
      Print stringa
    Endif
    
  Next
non mi funziona ... neanche con il solo '4' (anche perche' sospetto che la riga contenga caratteri non stampabili ....




......

tra' l'altro facendo alcune modifiche al codice per vedere piu' in profondita' cosa mi ritorna sto cavolo de server attraverso il telnet ... mi sono accorto che il vettore non e' composto SEMPRE  di righe ben definite ... ma e' un bel casino .....
Codice: [Seleziona]
tentativo di connessione ...
connesso!!!
il vettore della risposta contiene 2 righe.
Questo il loro contenuto:
riga 0
100 VTR Ready
201 OK
riga 1

4
0 "/mnt/Qnap1Multimedia/03_Playout/Artisti Oggi/01 artisti oggi ok 17-12-2009.mpg" 0 49329 49330 49330 25.00
1 "/mnt/Qnap1Multimedia/03_Playout/archivio video tg/a/acquedotto ok.mpg" 0 4194 4195 4195 25.00
2 "/mnt/Qnap1Multimedia/03_Playout/archivio video tg/a/agricoltura ok.mpg" 0 4803 4804 4804 25.00
3 "/mnt/Qnap1Multimedia/03_Playout/archivio video tg/a/albergo interni.mpg" 0 7703 7704 7704 25.00

in allegato il sorgente del progetto consolle ...
« Ultima modifica: 18 Novembre 2013, 19:26:22 da allegfede »
se corri, morirai stanco (motto degli sniper)

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re: Parser piu' evoluto del like (oppure tricks & tricks con il like)
« Risposta #1 il: 18 Novembre 2013, 19:54:02 »
qualcosina ho rislto con l'operatore "split"
http://gambasdoc.org/help/lang/split

ma l'output e' sempre una schifezza
Codice: [Seleziona]
il vettore della risposta contiene 2 righe.
Questo il loro contenuto:
riga 0
100 VTR Ready
201 OK
mentre la risposta separata con i caratteri escape e':
->100 VTR Ready
->201 OK
riga 1

4
0 "/mnt/Qnap1Multimedia/03_Playout/Artisti Oggi/01 artisti oggi ok 17-12-2009.mpg" 0 49329 49330 49330 25.00
1 "/mnt/Qnap1Multimedia/03_Playout/archivio video tg/a/acquedotto ok.mpg" 0 4194 4195 4195 25.00
2 "/mnt/Qnap1Multimedia/03_Playout/archivio video tg/a/agricoltura ok.mpg" 0 4803 4804 4804 25.00
3 "/mnt/Qnap1Multimedia/03_Playout/archivio video tg/a/albergo interni.mpg" 0 7703 7704 7704 25.00


mentre la risposta separata con i caratteri escape e':
->4
->0 "/mnt/Qnap1Multimedia/03_Playout/Artisti Oggi/01 artisti oggi ok 17-12-2009.mpg" 0 49329 49330 49330 25.00
->1 "/mnt/Qnap1Multimedia/03_Playout/archivio video tg/a/acquedotto ok.mpg" 0 4194 4195 4195 25.00
->2 "/mnt/Qnap1Multimedia/03_Playout/archivio video tg/a/agricoltura ok.mpg" 0 4803 4804 4804 25.00
->3 "/mnt/Qnap1Multimedia/03_Playout/archivio video tg/a/albergo interni.mpg" 0 7703 7704 7704 25.00

in allegato il nuovo codice
se corri, morirai stanco (motto degli sniper)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.269
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Parser piu' evoluto del like (oppure tricks & tricks con il like)
« Risposta #2 il: 18 Novembre 2013, 19:58:49 »
Ho provato il codice allegato, ma ho in console questa risposta:

select * from MediaPlaylist where channel = '' and data = '18/11/2013' order by start_time
Failed 'GetMediaPlaylist' procedure.
Impossible to connect to db [Connection is not opened]
« 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 vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.269
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Parser piu' evoluto del like (oppure tricks & tricks con il like)
« Risposta #3 il: 18 Novembre 2013, 20:04:30 »

non mi funziona ... neanche con il solo '4' (anche perche' sospetto che la riga contenga caratteri non stampabili ....


Inserisci il meta-carattere dell'asterisco *
Codice: gambas [Seleziona]

If stringa Like "[0-9]*" Then
...
« 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 pastrank

  • Maestro Gambero
  • ****
  • Post: 265
    • Mostra profilo
Re: Parser piu' evoluto del like (oppure tricks & tricks con il like)
« Risposta #4 il: 18 Novembre 2013, 21:50:30 »
qualcosina ho rislto con l'operatore "split"

Ma in pratica, la riga che cerchi e' l'unica che non contiene uno spazio e che e' solo numero, quindi controllando con instr() e isnumber() dovresti risolvere...

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.269
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Parser piu' evoluto del like (oppure tricks & tricks con il like)
« Risposta #5 il: 19 Novembre 2013, 09:08:24 »
...controllando con instr() e isnumber() dovresti risolvere...

Interessante.
Si potrebbe suggerire anche la funzione Left() al posto di instr():
Codice: gambas [Seleziona]

  If IsNumber(Left(stringa, 1)) Then....
« 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 allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re: Parser piu' evoluto del like (oppure tricks & tricks con il like)
« Risposta #6 il: 19 Novembre 2013, 18:13:16 »
ottimi suggerimenti ... sperimento ....
se corri, morirai stanco (motto degli sniper)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.269
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Parser piu' evoluto del like (oppure tricks & tricks con il like)
« Risposta #7 il: 19 Novembre 2013, 21:59:05 »
...per essere ancor più sicuro che stai trattando proprio un carattere ASCII che rappresenta un numero, forse è meglio:
Codice: gambas [Seleziona]

  If IsDigit(Left(stringa, 1)) Then....  
« 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 allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re: Parser piu' evoluto del like (oppure tricks & tricks con il like)
« Risposta #8 il: 29 Novembre 2013, 11:24:18 »
inizia a prendere forma il progetto e a breve mettero' in pratica i vostri suggerimenti .....

nel frattempo ho iniziato ad "ISOLARE" le varie richieste in modo da avere in ANTICIPO un'idea delle POSSIBILI risposte dal server (in modo da dover analizzare stringhe piu' specifiche).

infatti con due comandi (uno che lista i contenuti ed uno che chiede lo stato di playback) ottengo qursti (diversi) risultati .... che poi parsero' opportunamente:
Codice: [Seleziona]
allegfede@PRSose:~/OTVA app/client/xml_demon$ ./lancher.sh
OTVA deamon for channel: Tele Galileo
DB_server: 192.168.1.91:3306
DB_account: OTVA_user:OTVA_password
refresh frequency: 30 minutes
Melted server: localhost:5250

select * from MediaPlaylist where channel = 'Tele Galileo' and data = '11/29/2013' order by start_time
ci sono 0 media in lista
select * from SpotPlaylist where channel = 'Tele Galileo' and date = '11/29/2013' order by time
ci sono 0 spot in lista
tentativo di connessione ...
connesso!!!
Melted PlAYLIST (GetMeletdContent)
il vettore della risposta contiene 2 righe.
Questo il loro contenuto:
riga 0
100 VTR Ready
201 OK
mentre la risposta separata con i caratteri escape e':
->100 VTR Ready
->201 OK
riga 1

4
0 "/mnt/Qnap1Multimedia/03_Playout/Artisti Oggi/01 artisti oggi ok 17-12-2009.mpg" 0 49329 49330 49330 25.00
1 "/mnt/Qnap1Multimedia/03_Playout/archivio video tg/a/acquedotto ok.mpg" 0 4194 4195 4195 25.00
2 "/mnt/Qnap1Multimedia/03_Playout/archivio video tg/a/agricoltura ok.mpg" 0 4803 4804 4804 25.00
3 "/mnt/Qnap1Multimedia/03_Playout/archivio video tg/a/albergo interni.mpg" 0 7703 7704 7704 25.00


mentre la risposta separata con i caratteri escape e':
->4
->0 "/mnt/Qnap1Multimedia/03_Playout/Artisti Oggi/01 artisti oggi ok 17-12-2009.mpg" 0 49329 49330 49330 25.00
->1 "/mnt/Qnap1Multimedia/03_Playout/archivio video tg/a/acquedotto ok.mpg" 0 4194 4195 4195 25.00
->2 "/mnt/Qnap1Multimedia/03_Playout/archivio video tg/a/agricoltura ok.mpg" 0 4803 4804 4804 25.00
->3 "/mnt/Qnap1Multimedia/03_Playout/archivio video tg/a/albergo interni.mpg" 0 7703 7704 7704 25.00
tentativo di connessione ...
connesso!!!
Melted STATUS (GetMeletdStatus)
il vettore della risposta contiene 2 righe.
Questo il loro contenuto:
riga 0
100 VTR Ready
202 OK
mentre la risposta separata con i caratteri escape e':
->100 VTR Ready
->202 OK
riga 1

0 stopped "/mnt/Qnap1Multimedia/03_Playout/archivio video tg/a/albergo interni.mpg" 1357 0 25.00 0 7703 7704 "/mnt/Qnap1Multimedia/03_Playout/archivio video tg/a/albergo interni.mpg" 1357 0 7703 7704 1 4 3

mentre la risposta separata con i caratteri escape e':
->0 stopped "/mnt/Qnap1Multimedia/03_Playout/archivio video tg/a/albergo interni.mpg" 1357 0 25.00 0 7703 7704 "/mnt/Qnap1Multimedia/03_Playout/archivio video tg/a/albergo interni.mpg" 1357 0 7703 7704 1 4 3

PS: in allegato il codice e lo script bash, ma se volete provare a replicare il comportamento del server vi tocca compilare melted
http://www.mltframework.org/bin/view/MLT/BuildScripts
ed ovviamente commentare le righe relative alla connessione al DB mysql ...
se corri, morirai stanco (motto degli sniper)

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Parser piu' evoluto del like (oppure tricks & tricks con il like)
« Risposta #9 il: 29 Novembre 2013, 11:26:22 »
Se posso darti un consiglio: salva le date in formato americano. Non usare la nostra notazione. La notazione americana è perfetta per l'ordinamento dei dati. Fallo, poi un giorno mi ringrazierai. :)