PDA

View Full Version : Parsing di un file


Zifnab
23-01-2016, 22:38
Ciao a tutti.
Vi chiedo cortesemente un aiuto.
Nella mia azienda ci troviamo in una situazione un pò particolare. Vi spiego rapidamente. Dobbiamo installare un programma (uno schedulatore) che dovrà gestire tramite un agente installato su una macchina linux, il lancio di determinati job. Questi job al loro interno integrano la gestione di diverse schede parametro che vengono selezionate tramite determinate righe di controllo.

Ad esempio:
#rigacontrollo1
parametro1
#rigacontrollo2
parametro2
...
#rigacontrollofine

Lo schedulatore tramite l'agente passerebbe il parametro #JI,ID=x ma come si può fare il parsing di un file in queste condizioni e con quale linguaggio? Il vecchio sistema utilizzava dei programmi COBOL scritti apposta ma non possiamo riciclarli. Ho pensato di suggerire l'uso di Perl, è un suggerimento valido o voi avete consigli migliori? Se avete anche qualche esempio ve ne sarei molto grato.

cdimauro
24-01-2016, 09:57
Perl va anche bene, ma da pythonista non me la sento di consigliartelo.

Realizzare il parsing di quel file con Python è abbastanza semplice, e se la struttura è ESATTAMENTE quella (leggi: non è possibile che ci siano errori: c'è una rigorosa alternanza delle righe in quel formato), te ne esci fuori con qualche riga di codice.

Però non chiedermi di scrivere il codice per te. Posso cercare di aiutarti affinché lo realizzi tu, nei limiti di tempo e delle mie conoscenze, ovviamente.

GTKM
25-01-2016, 08:16
Come ha già detto cdimauro, se il file ha quella struttura, il parsing in Python lo effettui con poche righe di codice. Ma anche in Perl, o in un altro linguaggio. :D

Quindi, il tutto è legato alle tue preferenze. :)

Zifnab
26-01-2016, 00:04
Anzitutto grazie a entrambi per la risposta. La struttura esatta sarebbe più o meno questa (non l'ho scritta prima perchè non so quanti sappiano cos'è un JCL).

BEGINJOB

#JI,ID=1
parametro1
#JI,ID=2
parametro2
...
#JEND

LABEL name=STEP...
istruzione1
istruzione2
parametrox (derivata dalla selezione precedente)
EXECPGM ....

ENDJOB

Io non sono un programmatore al di là di script realizzati in shell bash, korn, ecc. però posso consigliare al fornitore (o eventualmente agli sviluppatori interni) di provare a sviluppare qualcosa in merito, all'ultima riunione c'era la possibilità che abbandonassero tutto per via di questo scoglio.

cdimauro
26-01-2016, 06:43
@Zifnab: non conosco JCL, ma concordo con coffe_killer, e ti faccio presente che l'esempio che hai fornito è certamente ben più complesso di quello che hai descritto prima.

Rimane ancora abbastanza semplice da eseguirne il parsing senza richiedere la scrittura di un vero e proprio parse, ma questo sempre che non salti fuori qualche altra cosa.

Zifnab
26-01-2016, 11:52
Ed è la prima volta che andiamo d'accordo su di una risposta :D

In ogni caso io ho usato JCL, COBOL e tecnologie legacy varie, l'ho fatto come primo lavoro finita l'università.
Per esperienza, presumo anche che zifnab lavori in ambito bancario-assicurativo, le realtà che ancora usano quei sistemi nel 2016, ed abbandonare quelle tecnologie per ora è abbastanza impensabile per loro, visti gli enormi costi che dovrebbe sostenere l'istituto, sicuramente più alti rispetto a quelli di gestione di quei dinosauri.

:D :D :D
Non sei molto lontano dalla verità, in effetti lavoro (come consulente IT) presso una società assicurativa, però non è un vero mainframe IBM perchè MVS era stato migrato verso una piattaforma prima Solaris poi Linux su cui risiede un software di rehosting in grado di gestire programmi COBOL CICS/BATCH, le connessioni 3270 ecc.
I nostri JCL hanno una struttura piuttosto simile ai JCL veri e propri, ma le sintassi sono diverse, anche più semplici. E quindi appoggiandoci su una macchina linux possiamo disporre sia di Perl che di Python... e a proposito grazie a voi ho già suggerito questa ipotesi ai sistemisti (a dire il vero uno voleva provare l'uso di Bash ma mi sembra masochismo!!), oggi o domani ne parlo con i nostri quadri così iniziamo a verificare quanto e se si possa realizzare. Tranquilli, non vi chiedo di aiutarci, so che ci sarebbe da uscire pazzi... e poi loro vengono pagati per questo :D però grazie infinite a tutti e due per i suggerimenti!!!

cdimauro
26-01-2016, 18:04
Ed è la prima volta che andiamo d'accordo su di una risposta :D
Niente di personale spero. :p
E quindi appoggiandoci su una macchina linux possiamo disporre sia di Perl che di Python... e a proposito grazie a voi ho già suggerito questa ipotesi ai sistemisti (a dire il vero uno voleva provare l'uso di Bash ma mi sembra masochismo!!),
Cosa pretendi che ti risponda un sistemista? Bash! :D E se è in vena di autolesionismo, anche Perl può andare bene. :asd:

Digli di provare a realizzare qualcosa di decente, leggibile, e mantenibile: con Python.

Anche se la piattaforma è vecchia, potete modernizzarla un po' alla volta, quando capita l'occasione, come in questo caso. Ma evitate altre scelte sbagliate: errare humanum est, perseverare autem diabolicum. ;)

cdimauro
26-01-2016, 21:14
Nono, anzi, la differente scuola di pensiero è ciò che rende questa sezione del foro interessante :D
Infatti un po' tutti apprendiamo cose nuove.

Devo dire che la partecipazione al forum in tutti questi anni mi ha consentito di ampliare il mio bagaglio culturale, e la mia esperienza. Tanta roba mi è stata molto utile a livello professionale, perché me la sono "rivenduta" nei progetti che ho realizzato, o nei colloqui che ho fatto.
Esatto....con Python si fanno magie in pochissime righe. Mi chiedo perchè nelle università siano ancora così restii all'insegnamento.
Perché, paradossalmente, tante volte sono i centri più reazionari. Non c'è peggio dei docenti che hanno imparato l'uso di qualche strumento, e sono restii o terrorizzati all'idea di doverne imparare qualcun altro.

GTKM
27-01-2016, 10:21
Esatto....con Python si fanno magie in pochissime righe. Mi chiedo perchè nelle università siano ancora così restii all'insegnamento.

Perché nelle Università pensano solo ad insegnare quelle 4 cose che fanno da cento anni.

Ancora si fanno approcciare i ragazzi alla programmazione con il C.

Zifnab
27-01-2016, 13:08
Niente di personale spero. :p

Cosa pretendi che ti risponda un sistemista? Bash! :D E se è in vena di autolesionismo, anche Perl può andare bene. :asd:

Digli di provare a realizzare qualcosa di decente, leggibile, e mantenibile: con Python.

Anche se la piattaforma è vecchia, potete modernizzarla un po' alla volta, quando capita l'occasione, come in questo caso. Ma evitate altre scelte sbagliate: errare humanum est, perseverare autem diabolicum. ;)

Nono, anzi, la differente scuola di pensiero è ciò che rende questa sezione del foro interessante :D



Esatto....con Python si fanno magie in pochissime righe. Mi chiedo perchè nelle università siano ancora così restii all'insegnamento.



Vero, ma modernizzare è una parola sconosciuta alla maggior parte dei senior dentro quel genere di istituti....quindi buona fortuna zif :D

Corretto, o meglio modernizzano i sistemi ma le procedure e i metodi rimangono rigidissimi. Più volte ho suggerito di modificare per migliorare (e velocizzare) le nostre procedure ma la mia team leader, donna di 50 e passa anni che ha lavorato sui veri mainframe, si rifiuta perchè in caso di "abend" (ABnormal ENDing) ufficialmente dice che "sono gli sviluppatori a dover migliorare i loro programmi COBOL" (ed in parte è pure vero ma se puoi le stesse cose in 10 step invece che in 20 e passa, non vedo il motivo di dover impiegare più tempo macchina che sottrae solo risorse ad altri impieghi) ma ufficiosamente è che non sarebbe più in grado di metterci le mani perchè lei ad esempio non conosce l'uso di un'istruzione 'sed' piuttosto che 'tr' per modificare il contenuto di un file. E il quadro che ci dirige non sa neanche cosa sia un JCL piuttosto che le piattaforme di scambio dati utilizzate.... :muro:

Zifnab
27-01-2016, 13:51
Il problema di avere dei team di sviluppo coordinati da persone che di formazione tecnica non hanno niente.

La tua team leader sospetto che non conosca nulla che vada oltre il cobol.

veramente la mia TL non conosce neanche quello, non sa leggere un programma cobol, o uno script. Comandi shell oltre mv, cp, rm, touch e ls non sa andare (e vi come editor di testo ma giusto i comandi base). :D