Extrahieren von Wörtern aus einer Zeile als Spaltenname und den entsprechenden Zahlen als Werte in die SpalteIch habe eine Spalte mit dem Namen "Fehler", in der Fehlercodes von verschiedenen Geräten extrahiert wurden. Einer der Fehlercodes eines bestimmten Tages ist unten angegeben.
"Wechselrichter Wechselrichter 20 unter dem Grenzwert: 0,96 Kilowatt / Wechselrichter (58,9% von 1,63 Kilowatt) am 30.11.2019, 7:30:00 Uhr (Sonne: 123,4 el: 3,7) Dauer: 4,00 Stunden Wechselrichter Wechselrichter 23 unter dem Grenzwert: 0,95 Kilowatt / Wechselrichter (57,9% von 1,63 Kilowatt) am 30.11.2019, 7:30:00 Uhr (Sonne: 123,4 el: 3,7) Dauer: 3,50 Stunden "
Ich muss die Details wie folgt im Format extrahieren ---- Spaltenname: Wert
Wechselrichter: 20
Unterhalb der Grenze (kW / Wechselrichter): 0,96
% von Max: 58,9%
Datum 30.11.2019
Zeit: 7:30:00 Uhr
Sun Az: 123,4
Höhe: 3.7
Dauer (Std.): 4
Wenn es einen zweiten Wechselrichter gibt, der ebenfalls einen Fehlercode hat, dann (siehe zweite Zeile im obigen Fehlercode)
Wechselrichter: 23
Unterhalb der Grenze (kW / Wechselrichter): 0,95
% von Max: 57,9%
Datum 30.11.2019
Zeit: 7:30:00 Uhr
Sun Az: 123,4
Höhe: 3.7
Dauer (Std.): 3,50
Manchmal gibt es 5 oder 10 Wechselrichter (von 70), die ähnliche Codes in einer einzigen Zeile angeben.
Können Sie mich wissen lassen, wie das geht? Ist es nur über JSL? oder kann ich formeln verwenden? Wie auch immer - ich brauche Hilfe.
DatentabelleSkriptingBetreff: Extrahieren von Wörtern aus einer Zeile als Spaltenname und den entsprechenden Zahlen als Werte in die SpalteMit dem Formeleditor sollten Sie in der Lage sein, große Fortschritte zu erzielen - sehen Sie sich die WORD-Funktion an
Betreff: Extrahieren von Wörtern aus einer Zeile als Spaltenname und den entsprechenden Zahlen als Werte in die SpalteDave,
Ja, ich könnte, wenn ich nur 1 oder 2 fehlerhafte Wechselrichter habe, aber wenn ich zum Beispiel 23 Fehlercodes in einer einzelnen Zeile für ein einzelnes Datum habe, muss ich so viele Spalten einzeln erstellen und dann Formeln für jede der beiden schreiben 23 Wechselrichter. Können Sie klarstellen, ob ich Ihre Lösung verstehe?Ich habe auch eine weitere Zeile hinzugefügt, die das Ziel der Analyse nach der Extraktion zusammenfasst.
Betreff: Extrahieren von Wörtern aus einer Zeile als Spaltenname und den entsprechenden Zahlen als Werte in die SpalteIch musste schon oft mit solchen Daten umgehen.Ich denke, der Ansatz muss gewählt werden, indem alle Daten aus Ihrer Eingabedatei in eine JMP-Datentabelle eingelesen werden, in der jede vollständige Zeile in eine einzelne Spalte eingelesen wird.Sie erhalten eine Datentabelle mit einer Spalte und der Anzahl der Zeilen, die der Anzahl der Zeilen in der Eingabedatentabelle entspricht.
Als Nächstes erstellen Sie eine neue Tabelle mit den drei Spalten Beschriftung, Wert und Zeile.Mit JSL, die den Inhalt jeder Zeile in einer Spalte durchsucht, wird eine neue Zeile in der neuen Tabelle erstellt und die Bezeichnung (z. B. Wechselrichter, Untergrenze (KW / Wechselrichter) usw.) und der Wert (dh 20) ausgefüllt , 0,96 usw.) und die Zeile, die nur die aktuelle Zeilennummer wäre ..... Zeile ().Möglicherweise muss auch eine zusätzliche Ausgangsspalte vorhanden sein, die darauf basiert, dass dies der 1. Wechselrichter in der Leitung oder der 2. Wechselrichter ist.
Dies kann mithilfe einer While () - Funktion in Kombination mit der Word () - Funktion erfolgen, die nach ":" als Trennzeichen sucht.Die ungeradzahligen Wörter sind die Beschriftungen, die geradzahligen sind die Werte.
Sobald diese neue Tabelle erstellt wurde, können Sie mit Tabellen => Teilen problemlos in eine Zeile pro Wechselrichter wechseln.
Betreff: Extrahieren von Wörtern aus einer Zeile als Spaltenname und den entsprechenden Zahlen als Werte in die SpalteJim
Danke für deinen Vorschlag. Ich werde es versuchen. Da ich neu in der Skripterstellung bin, werde ich Beispiele durchgehen, um es herauszufinden.
Betreff: Extrahieren von Wörtern aus einer Zeile als Spaltenname und den entsprechenden Zahlen als Werte in die SpalteIch hatte etwas Freizeit ...... sonst nicht viel mit Covid-19 zu tun, also habe ich ein bisschen JSL geschrieben, das Ihnen einen guten Einstieg in das Einlesen Ihrer Daten ermöglichen soll
Names Default To Here( 1 );
dt = Open(
"Path to the data file",
columns( New Column( "c000001", Character, "Nominal" ) ),
Import Settings(
End Of Line( CRLF, CR, LF ),
End Of Field( CSV( 0 ) ),
Strip Quotes( 1 ),
Use Apostrophe as Quotation Mark( 0 ),
Use Regional Settings( 0 ),
Scan Whole File( 1 ),
Treat empty columns as numeric( 0 ),
CompressNumericColumns( 0 ),
CompressCharacterColumns( 0 ),
CompressAllowListCheck( 0 ),
Labels( 0 ),
Column Names Start( 1 ),
Data Starts( 1 ),
Lines To Read( "All" ),
Year Rule( "20xx" )
)
);
// Create the new output data table
dtLong = New Table( "Long Data",
New Column( "Label", character ),
New Column( "Value", character ),
New Column( "Line" ),
New Column( "Instance" )
);
// A function that returns the next word in the line and
// then removes the word from the front of the target line
getWord = Function( {},
theWord = Trim( Word( 1, target, " " ) );
target = Trim( Substr( target, Length( theWord ) + 1 ) );
theWord;
);
// Loop through all rows in the input data table
For( i = 1, i <= N Rows( dt ), i++,
instance = 0;
target = Column( dt, 1 )[i];
While( Word( 1, target, " " ) != "",
dtLong << add rows( 1 );
dtLong:line[N Rows( dtLong )] = i;
theWord = getWord();
Match( theWord,
"inverter",
instance++;
dtLong:Instance[N Rows( dtLong )] = instance;
dtLong:Label[N Rows( dtLong )] = theWord;
theWord = getWord();
theWord = getword();
dtLong:value[N Rows( dtLong )] = theWord;,
"below",
dtLong:Instance[N Rows( dtLong )] = instance;
dtLong:Label[N Rows( dtLong )] = theWord || " limit (KW/Inverter)";
theWord = getWord();
theWord = getWord();
dtLong:value[N Rows( dtLong )] = theWord;
// Get the % of Max
dtLong << Add Rows( 1 );
dtLong:line[N Rows( dtLong )] = i;
dtLong:Instance[N Rows( dtLong )] = instance;
theWord = getWord();
theWord = getWord();
dtLong:Label[N Rows( dtLong )] = "% of Max";
dtLong:value[N Rows( dtLong )] = Substr( theWord, 2 );
// Skip forward to the Date
For( k = 1, k <= 5, k++,
theWord = getWord()
);
// Get the Date
dtLong << add rows( 1 );
theWord = getWord();
dtLong:Instance[N Rows( dtLong )] = instance;
dtLong:line[N Rows( dtLong )] = i;
dtLong:Label[N Rows( dtLong )] = "Date";
dtLong:value[N Rows( dtLong )] = theWord;
// Get the Time
dtLong << add rows( 1 );
theWord = getWord();
dtLong:Instance[N Rows( dtLong )] = instance;
dtLong:line[N Rows( dtLong )] = i;
dtLong:Label[N Rows( dtLong )] = "Time";
dtLong:value[N Rows( dtLong )] = theWord || getWord();
// Get the Sun Az
dtLong << add rows( 1 );
theWord = getWord();
dtLong:Instance[N Rows( dtLong )] = instance;
dtLong:line[N Rows( dtLong )] = i;
dtLong:Label[N Rows( dtLong )] = Substr( theWord, 2 ) || " " || getWord();
dtLong:value[N Rows( dtLong )] = getWord();
// Get the Elevation
dtLong << add rows( 1 );
theWord = getWord();
dtLong:Instance[N Rows( dtLong )] = instance;
dtLong:line[N Rows( dtLong )] = i;
dtLong:Label[N Rows( dtLong )] = "Elevation";
dtLong:value[N Rows( dtLong )] = Word( -1, getWord(), ")" );,
"Duration:",
dtLong:Instance[N Rows( dtLong )] = instance;
dtLong:Label[N Rows( dtLong )] = theWord || " (hrs)";
dtLong:value[N Rows( dtLong )] = getWord();
theWord = getWord();
)
;
);
);Betreff: Extrahieren von Wörtern aus einer Zeile als Spaltenname und den entsprechenden Zahlen als Werte in die SpalteTolle! Es funktioniert. Vielen Dank für Ihre Geduld beim Schreiben dieses langen Codes, um meine Anfrage zu erfüllen. Ich versuche, dies auf andere Warncodes zu implementieren, die ich habe. Vielen Dank. Es hat mir Äonen erspart.