Speichern inkrementierter Variablennamen in der For-Schleife in einer Listeich versuche zu
1) Öffnen Sie eine Reihe von Dateien, die in der Liste Unique_Files aufgeführt sind
2) Wenn die Datei nicht vorhanden ist, wird ein Dialogfeld mit einer Meldung geöffnet, die angibt, dass die Datei vorhanden ist
3) Wenn die Datei vorhanden ist, öffnen Sie sie in JMP
4) Wenn die Datei vorhanden ist, fügen Sie den Referenznamen der Datentabelle zur Liste UniqueTables hinzu
Jeder andere Teil meines Skripts scheint zu funktionieren, außer dass ich eine Liste mit den Referenznamen der Datentabelle erstellen kann.Die Art und Weise, wie mein Skript unten geschrieben ist, ergibt die Liste
UniqueTables = { DataTable("filename1"), Data Table("filename2"),....}
Stattdessen möchte ich, dass das Skript die Liste als ergibt
UniqueTables = My_Table_1, My_Table_2, My_Table_3,...
Dank im Voraus.
N Items (Unique_Files);
UniqueTables = { };
For ( i = 1, i <= N, i ++,
If(
File Exists( "C:\PretendFilePath\" ||Unique_Files[i]|| ".csv"),
Eval(
Substitute(
Expr(
MyTab = Open( "C:\PretendFilePath\" ||Unique_Files[i]|| ".csv");
Insert Into( UniqueTables, MyTab)
),
Expr( MyTab),
Parse( My_Table_" ||Char(i))
)
),
New Window ("File Not Found",
<< Modal,
V List Box(
Text Box( Unique_Files[i]|| " does not exist in folder."),
Button Box( "OK")
)
)
)
);Betreff: Inkrementierte Variablennamen in der For-Schleife in einer Liste speichernJawohl
Betreff: Inkrementierte Variablennamen in der For-Schleife in einer Liste speichernDiese Zeit war schwer zu sehen !!!!
Betreff: Inkrementierte Variablennamen in der For-Schleife in einer Liste speichernIrgendwie wie ein Punkt „.“ endete danach
Show( UniqueTables );.
Entfernen Sie es also und es wird gut funktionieren. Ich werde das vorherige Beispiel für zukünftige Referenzen korrigieren.
Betreff: Inkrementierte Variablennamen in der For-Schleife in einer Liste speichernIn der letzten Zeile erhalte ich die folgende Fehlermeldung:
Unerwartetes „UniqueTables“. Möglicherweise fehlt ein „;“ oder ",".
Zeile 42 Spalte 1: ►UniqueTables[1] << Concatenate( UniqueTables[2] );
Der verbleibende Text, der ignoriert wurde, war
UniqueTables[1]<Betreff: Inkrementierte Variablennamen in der For-Schleife in einer Liste speichern
Es scheint, dass Sie nicht wissen, was Ihnen die verschiedenen Strukturen tatsächlich bieten.Ich empfehle Ihnen dringend, sich die Zeit zu nehmen, den Scripting Guide zu lesen.Aber ich denke auch, dass das Folgende einige Probleme mit Ihrem aktuellen Code klären könnte.Schauen Sie sich meinen kommentierten Code unten an und sehen Sie, ob er etwas Licht auf die Probleme bringt, die Sie haben.
names default to here(1);
dt1=open("$SAMPLE_DATA/big class.jmp");
dt2=open("$SAMPLE_DATA/big class families.jmp");
// Here is what the value of dt1 is
show(dt1);
// From the log
// dt1 = DataTable("big class");
// Therefore the value of dt2 is,
show(dt2);
// dt2 = DataTable("big class families");
// The structure of the Concatenate Platform syntax is:
// data table("data table name") << Concatenate( data table("data table2 name"), data table("data table2 name") );
// That would mean that the following will concatenate our two files
data table( "big class" ) << Concatenate( data table( "big class families" ) );
// It also means, that since we have variables dt1, which was shown to equal Data Table( "big class" ), and
// dt2 which has the value of Data Table( "big class families" )
// the above concatenate statement can be written
dt1 << Concatenate( dt2 );
// Here is another way to do this
UniqueTables = {};
MyTab = open("$SAMPLE_DATA/big class.jmp");
insert into( UniqueTables, MyTab );
MyTab = open("$SAMPLE_DATA/big class families.jmp");
insert into( UniqueTables, MyTab );
Show( UniqueTables );
// returns
// UniqueTables = {DataTable("big class"), DataTable("big class families")};
// So now the Concatenate statement can be written
UniqueTables[1] << Concatenate( UniqueTables[2] );Betreff: Inkrementierte Variablennamen in der For-Schleife in einer Liste speichernSchauen Sie sich an, was für ein XY-Problem Das heißt, es wird uns auf jeden Fall helfen, Ihnen zu helfen.
Aber sonst.Wenn Sie nur versuchen, alle JMP-Dateien in einem Ordner zusammenzufassen.
Names default to here( 1 );
// this is just creating an example set don't worry about it.
dt = open("$SAMPLE_DATA\Big Class.jmp");
dir = convert file path("$DESKTOP\Example\");
Create Directory(dir);
for(i=1, i<=6, i++,
path = convert file path(char(i)||".jmp", base(dir));
dt << Save As(path);
);
// this is actually what you'll want to run
dir = convert file path("$DESKTOP\Example\");
// find the files in that directory
files = files in directory(dir);
// create a base table
dt_final = New Table("Concatted");
for(i=1, i<=nitems(files), i++,
dt = open(convert file path(files[i], base(dir)));
dt_final << Concatenate(dt, append to first table(1));
close(dt, no save);
)Betreff: Inkrementierte Variablennamen in der For-Schleife in einer Liste speichernHallo Jim,
Leider erhalte ich immer noch nicht das gewünschte Ergebnis, da ich meine Situation nicht klar dargelegt habe.
Ich hätte angeben sollen, dass die Unique_Files-Liste der Dateiname der CSVs ist, die im Ordnerspeicherort gespeichert sind.
Unique_Files = {"FileName1", "FileName2", "FileName3", etc...}
Die Verwendung der Funktion „<< Name abrufen“ führt zur UniqueTables-Liste als
UniqueTables = {"FileName1", "FileName2", "FileName3", etc...}
Wenn ich suche
UniqueTables = {My_Table_1, My_Table_2, My_Table_3, etc...}
Sobald ich die UniqueTables-Liste in diesem Format zusammengestellt habe, bestand mein Plan darin, einige dieser Tabellen miteinander zu verketten und die verketteten Quelltabellen zu schließen.Ich weiß nur, wie das mit dem Tabellenreferenznamen My_Table_1 geht. Gibt es eine Möglichkeit, Tabellen anhand ihres Dateinamens „FileName1“ zu verketten?Wenn ja, kann ich dieses Problem ganz umgehen.
Dank im Voraus!Du warst sehr hilfreich.
Betreff: Inkrementierte Variablennamen in der For-Schleife in einer Liste speichernDarf ich fragen, warum Sie das tun wollen?Dies macht die Unterstützung des Skripts sehr schwierig, da Sie keine Variablennamen finden können. Ich repariere Skripte, wenn die Besitzer ihren eigenen Code nicht mehr verstehen, und das ist immer etwas, worauf ich stoße.
Was bringt Ihnen die Angabe mehrerer Variablen, was bei einer Liste nicht der Fall ist?
Weil es unnötig erscheint
UniqueTables[1] = My_Table_1 = DataTable("filename1");
Betreff: Inkrementierte Variablennamen in der For-Schleife in einer Liste speichernSie müssen lediglich den Tabellennamen aus der Datentabellenreferenz abrufen. Ändern Sie also Ihre Referenz in „Mytab“ in:
Insert Into( UniqueTables, MyTab << get name)
Alle Nachrichten für die verschiedenen Elemente in JSL sind im Scripting Guide dokumentiert
Hilfe==>Skripting-Handbuch