Wie verwende ich rekursiv beim Verketten von CSV-Dateien in Ordnern?Hallo, kann mir jemand helfen, diesen Code zu ändern?Ich versuche, CSV-Dateien pro Ordner zu verketten. Der Benutzer muss einen Ordner auswählen und alle qualifizierten CSV-Ordner werden verkettet und entsprechend dem Ordnernamen gespeichert. Bei dieser Methode wählt der Benutzer pro Skriptausführung einen Ordner aus.
Was ich jetzt jedoch versuche, ist, den Benutzer dazu zu bringen, den Hauptordner auszuwählen, dann das Skript auszuführen und die Daten pro Unterordner zu verketten (sie einzeln mit ihrem Ordnernamen als Dateinamen zu speichern, wie in der vorherigen Methode).
Aber mit diesem Code werden alle CSV-Dateien in einer Datei verkettet. Können Sie helfen, die Funktionsweise von Rekursiv zu ändern und zu erklären? Und wie kann ich diese Dateien einzeln speichern (Daten pro Ordner verketten), indem ich einfach den Hauptordner öffne? Ich verwende JMP 15. Danke
p = pick Directory("Select a Folder");<BR />//f = Files In Directory(p);
f = Files In Directory(p, recursive(1));
Dir = Word(-1, p, "/"); //get filename
saveDir = Substr( p, 1, Length( p ) - Length( Word( -1, p, "\/" ) ) - 1 ); //save file outside main folder
/* Removes the file names from the list f which are not CSV files */
for(j=1,j<=N Items(f),j++,
If (Substr(f[j],Length(f[j])-2,3)!= "CSV",
RemoveFrom(f,j,1);
j=j-1;
);
);
A = {}; /* creates a empty list for storing the names of each data table */
B = {};
C = {};
D = {};
k = {};
m = {};
/*Opens each one of the CSV files and deletes all unwanted rows */
for(j=1,j<=N Items(f),j++,
CSV = Open(Concat(p,f[j]), End of Field(comma), Strip Quotes(1), Labels(1),
Column Names Start(3), Data Starts(4), Columns(:MRR=Numeric));
colname = {};
colname = CSV<<GET column="" names="">20 & Contains(colname,"Weight")>50,
InsertInto(A,CSV);
CSV<<SELECT where="">1,
dt2 = dt1<<CONCATENATE>1,
dt3 = dt1<<CONCATENATE></CONCATENATE></CONCATENATE></SELECT></GET>Automatisierung und SkripterstellungBetreff: Wie kann man CSV-Dateien in Ordnern rekursiv verketten?Hier ist ein Startskript, das alle rekursiven Dateien einliest und sie basierend auf dem Ordner, in dem sie gefunden wurden, in separaten Datentabellen verkettet.
Ich habe nicht alle Ihre einzelnen Fehlerprüfungen usw. einbezogen. Sie sollten in der Lage sein, mein Beispiel zu ändern, um diese Dinge wieder in den Code einzufügen.
Es gibt einen Strukturunterschied in diesem Code.Die JSL liest eine Datei ein und verkettet sie dann, bevor sie die nächste Datei einliest.Ich habe so viel wie möglich überprüft, aber es könnte immer noch Probleme geben.
names default to here(1);
p = pick Directory("Select a Folder");//f = Files In Directory(p);
f = Files In Directory(p, recursive(1));
for(i=nitems(f),i>=1,i--,
if(uppercase(word(-1,f[i],"."))!="CSV",
remove from(f,i,1)
)
);
// Create the Associative Array with all of the files, with their directories
// Place all data into a data table, and then move into an Associative Array which will give the
// folder(data table to concatenate to)
dt= new table("The Files", new column("File", character));
dt << add rows(nitems(f));
dt:file<<SET values=""></SET>Betreff: Wie kann man CSV-Dateien in Ordnern rekursiv verketten?Was benötigen Sie zur rekursiven(1)-Option erklärt?
Names Default To Here(1);
Files In Directory("$SAMPLE_DATA", recursive(1));
Ohne diese Option erhalten Sie nur die erste Ebene der Dateien im Ordner und bei Verwendung von „Rekursiv“ erhalten Sie auch die darin enthaltenen Unterordner und Dateien.

Hervorgehobene sind nur vorhanden, weil recursive(1) gesetzt wurde.
Zu Ihrem Skript: Wie viele Ordnerebenen haben Sie? Könnte es sich ändern? Wenn es mehrere Ebenen gibt, bis .csv-Dateien gefunden werden, wie sollte der Dateiname lauten?
Betreff: Wie kann man CSV-Dateien in Ordnern rekursiv verketten?Hallo, ich habe nur zwei Ordnerebenen: den Hauptordner und dann die mehreren Ordner mit der darin enthaltenen CSV-Datei. Hier ist eine Beispielausgabe des Skripts ohne rekursive Verwendung. Was ich tun möchte, ist, dass beim Ausführen des Skripts nur der Hauptordner ausgewählt wird und das Skript eine Ausgabe wie diese hat.

Betreff: Wie kann man CSV-Dateien in Ordnern rekursiv verketten?Sie können den Ordnernamen einfach mit Word() mit negativem Index ermitteln. Beispiel unten
Names Default To Here(1);
foldername = Word(-1, "F1/1.jmp", "/\"); //"1.jmp"
Ich würde höchstwahrscheinlich ein assoziatives Array erstellen, dessen Schlüssel die Ordnernamen sind. Dann würde ich die Dateiliste durchlaufen und prüfen, ob der Ordner nicht bereits im assoziativen Array vorhanden ist, ihn dann dort hinzufügen und seinen Wert als leere Liste initialisieren. Anschließend können Sie mithilfe von „Einfügen in“ die Dateipfade zu diesem assoziativen Array hinzufügen, um die Schlüssel zu korrigieren (verwenden Sie vollständige Pfade, damit die Dateien einfacher geöffnet werden können). Nachdem Sie die Dateiliste durchgesehen haben, führen Sie eine weitere Schleife über das assoziative Array durch. Öffnen Sie dieses Mal die Dateien und verketten Sie sie nach und nach
Betreff: Wie kann man CSV-Dateien in Ordnern rekursiv verketten?Hallo, ich habe eine Frage zu dieser Codezeile, da ich immer noch JMP 15 verwende. Wie kann ich das in JMP 15 (for-Loop-Format) übersetzen? Ich bin etwas verwirrt darüber, was {table} ist, wenn es in JMP 15 im for-Loop-Format vorliegt. Und wie kann ich diese CSV-Dateien entsprechend speichern? In meinem Beispiel ist es nach Geschlecht. Daher sollten die Dateinamen nach Geschlecht gespeichert werden (Male.csv & Female.csv)
For Each( {table}, theArray << get keys,
stable = theArray << get value( table );
stable = Substitute( stable, ":", "-" );
stable = Substitute( stable, "/", "-" );
If( Try( Data Table( stable ) << get name, "" ) == "",
dt = New Table( theArray << get value( table ) ),
dt = Data Table( stable )
);
Betreff: Wie kann man CSV-Dateien in Ordnern rekursiv verketten?Ich denke, das sollte funktionieren:
arrayKeys = theArray << get keys;
For(i=1, i <=nitems( arrayKeys), i++,
table = arrayKeys[i];
stable = theArray << get value( table );
stable = Substitute( stable, ":", "-" );
stable = Substitute( stable, "/", "-" );
If( Try( Data Table( stable ) << get name, "" ) == "",
dt = New Table( theArray << get value( table ) ),
dt = Data Table( stable )
);