Da stringa a tabella dati (ottimizzazione del codice)Un file .exe all'interno di un ciclo restituisce una stringa che deve essere convertita (in modo efficiente) in una tabella di dati.
La corda ha le seguenti caratteristiche:
- Le righe sono limitate dai caratteri "\n", anche se questo può essere modificato se necessario
- Le colonne sono limitate da ","
- L'accattonaggio e la fine della stringa hanno righe che è necessario eliminare
- Le righe datetime possono variare. Nell'esempio si possono vedere 7 ma questi possono arrivare fino a 100k righe.
- Queste operazioni verranno ripetute all'interno del ciclo nell'ordine delle centinaia (stringhe diverse ma stesso numero di righe)
str_query =
"*> mycolumnname
1,mycolumnname,50.,mycolumdescription,mycolumnunits
* End exe...
*> mycolumnname, 31-Jan-2020 14:30:00, 31-Jan-2020 15:30:00, blabla, 7
31-Jan-20 14:30:00,mycolumnname,10.60466
31-Jan-20 14:40:00,mycolumnname,10.60466
31-Jan-20 14:50:00,mycolumnname,10.60466
31-Jan-20 15:00:00,mycolumnname,10.60466
31-Jan-20 15:10:00,mycolumnname,10.60466
31-Jan-20 15:20:00,mycolumnname,10.60466
31-Jan-20 15:30:00,mycolumnname,10.60466
* End exe...
...
...
...
...
";
Come posso trasformare questa stringa in una tabella di dati con il seguente formato (impilato):
31-Jan-20 14:30:00,mycolumnname,10.60466,mycolumdescription,mycolumnunits
31-Jan-20 14:40:00,mycolumnname,10.60466,mycolumdescription,mycolumnunits
31-Jan-20 14:50:00,mycolumnname,10.60466,mycolumdescription,mycolumnunits
31-Jan-20 15:00:00,mycolumnname,10.60466,mycolumdescription,mycolumnunits
31-Jan-20 15:10:00,mycolumnname,10.60466,mycolumdescription,mycolumnunits
31-Jan-20 15:20:00,mycolumnname,10.60466,mycolumdescription,mycolumnunits
31-Jan-20 15:30:00,mycolumnname,10.60466,mycolumdescription,mycolumnunits
Quali funzioni JSL possono gestire queste operazioni da stringa a tabella di dati in modo efficiente (memoria e/o CPU saggia?).
Non è possibile utilizzare il multithreading o il multiprocessing si tratta di interrogare un database.
Ri: Da stringa a tabella dati (ottimizzazione del codice)F.N.,
Curioso di sapere se hai provato l'approccio di Craig? Ha funzionato per il tuo esempio?
-B
Ri: Da stringa a tabella dati (ottimizzazione del codice)... e puoi ancora passare i parametri CSV a quell'istruzione aperta. Se l'output ha righe aggiuntive all'inizio che non è possibile correggere, è possibile indicare all'istruzione open la prima riga di dati, la presenza di nomi di colonne e quali tipi di dati utilizzare. Se i dati sono più di poche righe, potrebbe essere notevolmente più veloce dire a JMP tutto ciò che è nello script di origine in modo che JMP non effettui un ulteriore passaggio per indovinare il formato. Lo script di origine si trova in una tabella JMP già importata.
Ri: Da stringa a tabella dati (ottimizzazione del codice)Freddo! RunProgram può restituire un BLOB. La funzione open() può accettare un blob al posto di un nome file. Se riesci a ottenere il programma esterno per creare il CSV come output stampato (su stdout), dovrebbe funzionare.
esempio qui: https://community.jmp.com/t5/Discussions/Load-CSV-from-variable/mp/208453
Ri: Da stringa a tabella dati (ottimizzazione del codice)Sì, è quasi una stringa con una formattazione CSV e l'output può essere regolato in una certa misura.
Il codice corrente utilizza RunProgram() per ottenere la stringa di output, quindi Words() per ottenere un elenco e quindi TextToColumns().
Possiamo Open() direttamente una stringa? Sembra aperto sia solo per i file, che idealmente dovrebbero essere evitati.
Ri: Da stringa a tabella dati (ottimizzazione del codice)il tuo formato assomiglia molto a un file CSV. la funzione open() comprende i dati CSV e, se gli fornisci informazioni sufficienti sulle colonne e sui tipi di dati, può essere abbastanza efficiente (sia il tempo di sviluppo che il tempo di attesa).
Come stai ottenendo i dati dal programma .exe a JMP? (file flat? runProgram()? open()? qualcos'altro?)
Ri: Da stringa a tabella dati (ottimizzazione del codice)Forse inserire le due parti in elenchi è un modo per iniziare?
clear globals();
query =
"*> mycolumnname 1,mycolumnname,50.,mycolumdescription,mycolumnunits
* End exe...
*> mycolumnname, 31-Jan-2020 14:30:00, 31-Jan-2020 15:30:00, blabla, 7
31-Jan-20 14:30:00,mycolumnname,10.60466
31-Jan-20 14:40:00,mycolumnname,10.60466
31-Jan-20 14:50:00,mycolumnname,10.60466
31-Jan-20 15:00:00,mycolumnname,10.60466
31-Jan-20 15:10:00,mycolumnname,10.60466
31-Jan-20 15:20:00,mycolumnname,10.60466
31-Jan-20 15:30:00,mycolumnname,10.60466
* End exe...
...
...
...
...
";
query=Substitute( query, "*> mycolumnname ", "colnames=list(" );
query=Substitute( query, "* End exe...", ");" );
query=Substitute( query, "*> mycolumnname, ", "coldata=list(" );
query=Substitute( query, "* End exe...", ");" );
for(i=1, i<=5, i++, query=Substitute( query, "...", "" ));
show(query);<BR /><BR />
Cosa hai provato?