ZIP-Datei lesen, wenn sie „string“ enthält, dann Zeile zu einer Tabelle mit Wertebeschriftung hinzufügenHallo,
Ich habe eine Tabelle erstellt und dann einen ZIP-Ordner geöffnet, zuerst eine Protokolldatei in einem bestimmten Pfad gespeichert, zweitens eine Datei (Langtextdatei) gelesen und dann überprüft, ob sie eine Zeichenfolge enthält. Wenn ja, fügen Sie der erstellten Tabelle eine neue Zeile hinzu und fügen Sie einen Wert hinzu. Alles funktioniert, bis eine neue Zeile und ein neuer Wert zur Tabelle hinzugefügt werden. Ich kann nicht herausfinden, wo das Problem liegt, da das Protokoll weder Fehler noch Informationen enthält. Unten ist mein Skript. Kann jemand einen Vorschlag machen, wo das Problem liegt?
dt = open(sometable);
lst2 = column(dt1, "t1") << Get Values;
dt2 = new table("data_"||todaydate,
new column("t1", character),
newcolumn("data", character)
);
for (k=1, k <=N items(lst2), k++,
//print (lst2[k]);
Try(
za = open(path2||lst2[k], zip);
dirlist = za << dir;
//show(dirlist); //check the list
for (l=1, l<=N Items(dirlist), l++,
If (Left(dirlist[l],5) == "tests" & Right(dirlist[l],8) == "_raw.log" ,
show(dirlist[l]);
text = za << read(dirlist[l]);
//print (dirlist[l]);
save text file(path1|| Format Date( Today(), "ddmonyyyy" ) ||"\"||lst2[k]||"_"||dirlist[l],text);
,
dirlist[l]== "line.log" ,
text = za << read(dirlist[l]);
if(contains(text, "string"),
dt2 << add rows (t1 = lst2[k], data = "Yes"),
dt2 << add rows (t1 = lst2[k], data = "No")
);
);
)
,
print (lst2[k] || "fail to open");
Throw();
);
);
Automatisierung und SkripterstellungBetreff: ZIP-Datei lesen, wenn sie „string“ enthält, dann Zeile zu einer Tabelle mit Wertebeschriftung hinzufügenIch glaube, ich habe das Problem gefunden. Braucht das {} . Es hat vorher ohne {} funktioniert. Hat jemand eine Ahnung, warum jetzt das {} benötigt wird?
dt2 << add rows ({t1 = lst2[k], data = "Yes"}),
dt2 << add rows ({t1 = lst2[k], data = "No"})
Betreff: ZIP-Datei lesen, wenn sie „string“ enthält, dann Zeile zu einer Tabelle mit Wertebeschriftung hinzufügen
Help->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHilfe->Skriptindex
Das Dokument sieht seit mindestens JMP 14 so aus. Sehen Sie eine Verhaltensänderung zwischen den Versionen?
Betreff: ZIP-Datei lesen, wenn sie „string“ enthält, dann Zeile zu einer Tabelle mit Wertebeschriftung hinzufügenHallo Craige,
Ich habe es unten mit Erfolg gemacht, als ich nur Zeilen und Werte zu einer der Spalten hinzugefügt habe.
dt2 = new table("data_"||todaydate,
new column("t1", character),
newcolumn("data", character)
);
for (k=1, k <=N items(lst2), k++,
dt2 << add rows (t1 = lst2[k])
);
Betreff: ZIP-Datei lesen, wenn sie „string“ enthält, dann Zeile zu einer Tabelle mit Wertebeschriftung hinzufügenWenn lst2[k] eine Zahl wäre, vielleicht 1, könnte ich mir vorstellen, wie es funktioniert hätte. Die Zuweisung würde ausgewertet und t1 der (alten) aktuellen Zeile geändert. Das Ergebnis (in t1) wäre dann die Anzahl der hinzuzufügenden Zeilen. Diesen Zeilen wird jedoch erst beim nächsten Schleifendurchlauf ein Wert zugewiesen. Aber das passt nicht ganz zu dem, was Sie haben (ein Charakter t1), also vielleicht auch nicht.
Ich bin froh, dass du es herausgefunden hast. Die Liste wertet die Elemente in der Liste nicht aus. Stattdessen wird die Liste an die Methode zum Hinzufügen von Zeilen übergeben und addrows verwendet die Liste für die neu hinzugefügte Zeile.
Betreff: ZIP-Datei lesen, wenn sie „string“ enthält, dann Zeile zu einer Tabelle mit Wertebeschriftung hinzufügenIch habe folgende Frage zu try() und throw() in meinem ursprünglichen Skript oben. Ich stoße auf eine Situation, in der try() + throw() nicht überspringt und mit der nächsten Schleife fortfährt. Das Problem tritt beim Lesen von line.log auf. Eines der line.log-Dateien ist so groß, dass es nicht geöffnet werden kann. Ich bin zu dem Schluss gekommen, weil ich versucht habe, die spezifische Datei „line.log“ manuell zu öffnen, und mir die Fehlermeldung angezeigt wurde, dass die Datei zu groß ist, um sie per TXT zu öffnen. Also fügte ich ein weiteres try() und throw() hinzu, aber es wurde immer noch nur die Meldung lst2[k] „cannot read“ und lst2[k[ „fail to open“ ausgegeben. dann stoppt die Schleife bei lst2[k] und geht nicht zum nächsten in der Schleife über. Habe ich einen Fehler bei der Verwendung von try() und throw() gemacht?
dt = open(sometable);
lst2 = column(dt1, "t1") << Get Values;
dt2 = new table("data_"||todaydate,
new column("t1", character),
newcolumn("data", character)
);
for (k=1, k <=N items(lst2), k++,
//print (lst2[k]);
Try(
za = open(path2||lst2[k], zip);
dirlist = za << dir;
//show(dirlist); //check the list
for (l=1, l<=N Items(dirlist), l++,
If (Left(dirlist[l],5) == "tests" & Right(dirlist[l],8) == "_raw.log" ,
show(dirlist[l]);
text = za << read(dirlist[l]);
//print (dirlist[l]);
save text file(path1|| Format Date( Today(), "ddmonyyyy" ) ||"\"||lst2[k]||"_"||dirlist[l],text);
,
dirlist[l]== "line.log" ,<BR />try(
text = za << read(dirlist[l]);
if(contains(text, "string"),
dt2 << add rows (t1 = lst2[k], data = "Yes"),
dt2 << add rows (t1 = lst2[k], data = "No")
);<BR />,<BR />print(lst2[k] || "cannot read");<BR />throw();<BR />);
);
)
,
print (lst2[k] || "fail to open");
Throw();
);
);Betreff: ZIP-Datei lesen, wenn sie „string“ enthält, dann Zeile zu einer Tabelle mit Wertebeschriftung hinzufügenIch habe den Code neu formatiert (Strg-M), um die Struktur zu sehen, und ich denke, Sie möchten throw() weglassen.
The error from <<read was caught, then re-thrown to the outer try,The error from <<read was caught, then re-thrown to the outer try,The error from <<read was caught, then re-thrown to the outer try,The error from <<read was caught, then re-thrown to the outer try,The error from <<read was caught, then re-thrown to the outer try,The error from <<read was caught, then re-thrown to the outer try,The error from <<read was caught, then re-thrown to the outer try,The error from <<read was caught, then re-thrown to the outer try,The error from <<read was caught, then re-thrown to the outer try,The error from <<read was caught, then re-thrown to the outer try,The error from <<read was caught, then re-thrown to the outer try,The error from <<read was caught, then re-thrown to the outer try,The error from <<read was caught, then re-thrown to the outer try,The error from <<read was caught, then re-thrown to the outer try,The error from <<read was caught, then re-thrown to the outer try,Der Fehler von <
Sie möchten wahrscheinlich auch nicht den äußeren Wurf. Manchmal ist die Verwendung von throw() auf diese Weise wünschenswert, wenn Sie wirklich meinen, Sie hätten die Ausnahmebehandlung noch nicht abgeschlossen und möchten, dass sie an einen enthaltenden Handler weitergegeben wird, aber zumindest für den inneren Versuch denke ich, dass Sie sich darum gekümmert haben und das möchten Schleife, um fortzufahren.
Betreff: ZIP-Datei lesen, wenn sie „string“ enthält, dann Zeile zu einer Tabelle mit Wertebeschriftung hinzufügenentferne nur inner throw() das Skript gibt alle lst2[k] „kann nicht lesen“ aus. Wenn Sie jedoch sowohl die inneren als auch die äußeren throw()s entfernen, wird das Skript wie vorgesehen ausgeführt.
Betreff: ZIP-Datei lesen, wenn sie „string“ enthält, dann Zeile zu einer Tabelle mit Wertebeschriftung hinzufügenIch denke, Sie haben die Antwort, nur um es klarzustellen:
dt = Open( sometable );
lst2 = Column( dt1, "t1" ) << Get Values;
dt2 = New Table( "data_" || todaydate, New Column( "t1", character ), New Column( "data", character ) );
For( k = 1, k <= N Items( lst2 ), k++,
Try(
za = Open( path2 || lst2[k], zip );
dirlist = za << dir;
For( l = 1, l <= N Items( dirlist ), l++,
If( Left( dirlist[l], 5 ) == "tests" & Right( dirlist[l], 8 ) == "_raw.log",
Show( dirlist[l] );
text = za << read( dirlist[l] );
Save Text File( path1 || Format Date( Today(), "ddmonyyyy" ) || "\" || lst2[k] || "_" || dirlist[l], text );
,/*else if*/ dirlist[l] == "line.log",
Try(
text = za << read( dirlist[l] );
If( Contains( text, "string" ),
dt2 << add rows( t1 = lst2[k], data = "Yes" ),
dt2 << add rows( t1 = lst2[k], data = "No" )
);
,/* catch*/
Print( lst2[k] || "cannot read" );
Throw(); // this throw will end the for-L loop
);
);
);
,/*catch*/
Print( lst2[k] || "fail to open" );
Throw(); // this throw will end the for-K loop
)
);