PDA

View Full Version : [POWERSHELL] Get-Content genera output in 2 righe


ziocan
06-10-2017, 08:34
Buon Giorno a tutti..
non sono propriamente un programmatore/scripter ma diciamo che sono uno smanettone che per quel poco che gli serve un po ci capisce..

Vi illustro un po la mia necessità.

Dispongo di una stazione meteo che mi genera un output in un formato separato da virgole come questo:
2017-10-06,09:19:30.00,C,K,-00.0,20.6,00.0,6.1,74,15.8,3,0,0,0,0,0,0,0,0,0,0

Il driver del mio osservatorio astronomico per interpretare questa riga ha bisogno che sia formattato in "colonne a larghezza fissa" come questo:

2017-10-06 09:16:10.00 C K -00.0 20.3 00.0 6.1 75 15.7 3 0 0 0 0 0 0 0 0 0


non sto a scrivervi tutte le specifiche (da carattere a carattere corrisponde, ecc), ma cosi l'ho testato e funziona

Per passare dal testo separato da virgole a testo in colonne googlando sono arrivato a un topic di StackOverFlow dove veniva illustrato questo script powershell:

>output.txt powershell "Get-Content input.txt | %%{'{0,-11}{1,-12}{2,-2}{3,-2}{4,-7}{5,-7}{6,-7}{7,-7}{8,-4}{9,-7}{10,-4}{11,-2}{12,-2}{13,-6}{14,-13}{15,-2}{16,-2}{17,-2}{18,-2}{19}' -f $_.split(',')}"

Lo script è inserito all'interno di un batch cmd che fa un loop ogni 180 secondi per aggiornare i dati.. fa quel che deve fare.. con un problema però.. l'output che restituisce dopo 79 caratteri a un certo punto va a capo e il driver che deve interpretarlo ovviamente impazzisce e non riconosce piu la stringa.. questo è un output che genera:

2017-10-06 09:28:05.00 C K -00.0 19.9 00.0 7.2 73 14.9 3 0 0 0
0 0 0 0 0 0

se cancello un carattere e porto tutto su una riga la stringa viene perfettamente riconosciuta e tutto funziona perfettamente..

Come ho premesso.. di programmazione ne so poco.. ho fatto qualche prova (-width 1000) ma andare alla cieca per tentativi su powershell vuol dire letteralmente impazzire e perdersi nella montagna di comandi da concatenare.. C'è qualche anima pia che mi puo dare una mano?

Grazie in anticipo

the_best_hacker
06-10-2017, 08:44
Ciao, è da un pezzo che non faccio script ma sto pensando che una cosa del genere si possa fare tramite l'interprete AWK settando come separatore la virgola e printando tutto.
L'unico dubbio che mi viene è se poi i vari termini te li separa da uno spazio e da un a capo anziché solo lo spazio.

In ogni caso puoi dare un'occhiata


Inviato dal mio iPhone utilizzando Tapatalk

ziocan
06-10-2017, 10:16
Leggendo qua e là mi sono imbattuto in una discussione che parlava proprio di questo problema in altri ambiti e alcuni utenti suggerivano di allargare la finestra nelle proprietà al numero di caratteri desiderato..

ho fatto la stessa operazione sulla finestra della riga di comando CMD mettendo 123caratteri ed effettivamente l'output adesso è tutto su una linea

Soluzione fin troppo banale e semplice ma a quanto pare efficace, non so se reggerá al riavvio del sistema operativo Ma nel caso potrei considerare il problema risolto anche se in modo poco professionale:ciapet: