String in Datentabelle (Codeoptimierung)Eine .exe-Datei innerhalb einer Schleife gibt eine Zeichenfolge zurück, die (effizient) in eine Datentabelle konvertiert werden muss.
Die Zeichenfolge weist folgende Eigenschaften auf:
- Zeilen sind durch „\n“-Zeichen begrenzt, dies kann jedoch bei Bedarf geändert werden
- Spalten werden durch "," begrenzt
- Am Anfang und am Ende der Zeichenfolge gibt es Zeilen, die entfernt werden müssen
- Die Datums-/Uhrzeitzeilen können variieren. Im Beispiel sieht man 7, aber diese können bis zu 100.000 Zeilen umfassen.
- Diese Vorgänge werden innerhalb der Schleife in der Größenordnung von Hunderten wiederholt (verschiedene Zeichenfolgen, aber dieselbe Anzahl von Zeilen).
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...
...
...
...
...
";
Wie kann ich diese Zeichenfolge in eine Datentabelle mit dem folgenden (gestapelten) Format umwandeln:
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
Welche JSL-Funktionen können diese String-zu-Datentabellen-Operationen effizient verwalten (speicher- und/oder CPU-bezogen?).
Multithreading oder Multiprocessing können nicht verwendet werden, da hier eine Datenbankabfrage erfolgt.
Betreff: String in Datentabelle (Codeoptimierung)FN,
Möchten Sie wissen, ob Sie Craigs Ansatz ausprobiert haben? Hat es in Ihrem Beispiel funktioniert?
-B
Betreff: String in Datentabelle (Codeoptimierung)...und Sie können die CSV-Parameter weiterhin an diese offene Anweisung übergeben. Wenn die Ausgabe am Anfang zusätzliche Zeilen enthält, die Sie nicht reparieren können, können Sie der open-Anweisung die erste Datenzeile, das Vorhandensein von Spaltennamen und die zu verwendenden Datentypen mitteilen. Wenn die Daten mehr als ein paar Zeilen umfassen, kann es deutlich schneller sein, JMP alles mitzuteilen, was im Quellskript enthalten ist, sodass JMP keinen zusätzlichen Durchgang zum Erraten des Formats durchführt. Das Quellskript befindet sich in einer bereits importierten JMP-Tabelle.
Betreff: String in Datentabelle (Codeoptimierung)Cool! RunProgram kann einen Blob zurückgeben. Die Funktion open() kann einen Blob anstelle eines Dateinamens akzeptieren. Wenn Sie das externe Programm dazu bringen können, die CSV-Datei als gedruckte Ausgabe (auf stdout) zu erstellen, sollte es funktionieren.
Beispiel hier: https://community.jmp.com/t5/Discussions/Load-CSV-from-variable/mp/208453
Betreff: String in Datentabelle (Codeoptimierung)Ja, es handelt sich fast um eine Zeichenfolge mit CSV-Formatierung, und die Ausgabe kann bis zu einem gewissen Grad angepasst werden.
Der aktuelle Code verwendet RunProgram(), um die Ausgabezeichenfolge abzurufen, dann Words(), um eine Liste abzurufen, und dann TextToColumns().
Können wir einen String direkt öffnen()? Es scheint, dass Open nur für Dateien gedacht ist, was idealerweise vermieden werden sollte.
Betreff: String in Datentabelle (Codeoptimierung)Ihr Format ähnelt stark einer CSV-Datei. Die Funktion open() versteht CSV-Daten, und wenn Sie ihr genügend Informationen zu den Spalten und Datentypen geben, kann sie sehr effizient sein (sowohl Ihre Entwicklungszeit als auch Ihre Wartezeit).
Wie übertragen Sie die Daten vom .exe-Programm an JMP? (Flachdatei? runProgram()? open()? etwas anderes?)
Betreff: String in Datentabelle (Codeoptimierung)Vielleicht ist es ein Einstieg, die beiden Teile in Listen zusammenzufassen?
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 />
Was hast du versucht?