Kombinieren Sie mehrere TXT- oder CSV-DateienDieses Skript kombiniert mehrere TXT- oder CSV-Dateien in einer Datei. Das Skript fragt nach einem Zielverzeichnis, öffnet die erste Datei und fügt dann mithilfe der Funktion „Tabelle verketten“ iterativ die nachfolgenden Dateien zur ersten hinzu.In der endgültigen Datei wird eine neue Spalte erstellt: Diese Spalte enthält den Namen der Datei, aus der die einzelnen Zeilen stammen. Wenn alle Textdateien dieselben (identischen) Spaltennamen haben, werden diese Spalten alle in einer Spalte gestapelt (verkettet). Auch eindeutige Spalten werden in die endgültige Datei übernommen.
Das Skript enthält mehrere auskommentierte Abschnitte. Diese Abschnitte des Skripts können zum Kombinieren mehrerer Excel-Dateien verwendet werden. Beim Kombinieren von Excel-Dateien wird davon ausgegangen, dass diese .xls- oder .xlsx-Dateien nur ein Arbeitsblatt haben.
-------Aktualisiert am 1. Juni 2016
Ich hatte eine interessante Frage zu diesem Skript. Jemand hatte einen Stapel CSV-Dateien, in denen sich die Spaltennamen in der zweiten Zeile befanden, und um die Sache noch schlimmer zu machen, waren die Spaltennamen durch Semikolons getrennt, während der Text durch Kommas getrennt war.Eine Möglichkeit, damit umzugehen, besteht darin, Importeinstellungen zum Skript hinzuzufügen.Dies ist eines der Dinge, die JMP gerne für mich schreibt.Ich habe die Datei manuell geöffnet und importiert (über Datei > Öffnen > Mit Vorschau öffnen), dann im Dialogfeld die Spalten so eingestellt, dass sie in der zweiten Zeile beginnen, und ein „anderes“ Trennzeichen von „;“ hinzugefügt.Nachdem ich die Datei importiert hatte, ging ich zum Quellskript und fand das Argument „Importeinstellungen“.
Damit das Skript diese Dateien öffnet, habe ich einen Ausdruck hinzugefügt: importset=expr(import Settings(...paste script here...)); oben im Skript. (Es ist ein Ausdruck, da es nicht sinnvoll ist, die Importeinstellungen auszuwerten, bis ich sie später beim Öffnen der Dateien benötige.)
Dann habe ich ganz unten den Ausdruck zum offenen Argument open(filename,importset) hinzugefügt.
WICHTIGER HINWEIS: Wenn Sie dieses zweite Skript mit dem Importfilter herunterladen und erwarten, dass es automatisch auf Ihren ungewöhnlich formatierten CSV-Tabellen funktioniert.Es wird einfach nicht funktionieren. Sie müssen Ihre eigenen Importeinstellungen erstellen und diese durch die Einstellungen ersetzen, die hier als Beispiel dienen.
--------Vor einiger Zeit gab es auch eine Frage, wie man das auf einem MAC zum Laufen bringt.
Ich habe noch ein weiteres Bit hinzugefügt, damit es auch auf einem Mac funktioniert (was bedeutet, dass ich es nicht auf einem PC getestet habe)
If( Host is( Mac ),
filepath="/"||prefilepath,
filepath = Convert File Path( prefilepath, Windows )
);
-----Aktualisiert am 10. Oktober 2016
Justin C bemerkte, dass Dateinamen mit mehreren „.“s nicht so gut funktionierten, und schlug vor, das „Element“ auf -1 zu ändern, damit die Dateierweiterungen anstelle des zweiten Elements für Dateierweiterungen verwendet werden. Schöner Fix und eine wichtige Idee, die Sie bei der Arbeit mit Dateinamen im Hinterkopf behalten sollten. Danke Justin!
DienstprogrammeBetreff: Mehrere TXT- oder CSV-Dateien kombinierenIch stelle fest, dass die Spalten in meinem Fall nicht immer richtig verbunden sind.Kann jemand dabei helfen?
Ich habe eine Reihe von Dateien, die ich verketten möchte, aber die Spaltenreihenfolge ändert sich gelegentlich, wie im folgenden Beispiel gezeigt:
Dateien 1-3
Spaltenreihenfolge (A,B,C,D,E,F,G)
Dateien 4-100
Spaltenreihenfolge (A,B,C,D,E, H ,F,G)
Dateien 101-1000
Spaltenreihenfolge (A,B,C, K ,D,E, H ,F,G, ICH , J )
Ich möchte alle diese Dateien kombinieren und sicherstellen, dass die Daten aus jeder Spalte immer in der entsprechenden Spalte der endgültigen Tabelle landen.Ich möchte auch alle Daten behalten (Spalte K nicht löschen, sondern alle Zeilen leer lassen, in denen Spalte K nicht vorhanden war).Jede Hilfe wäre sehr dankbar!
Betreff: Mehrere TXT- oder CSV-Dateien kombinierenGibt es eine Möglichkeit, in diesem Skript einen Header hinzuzufügen?Ich habe etwa 20.000 Dateien mit Daten ohne Header
Betreff: Mehrere TXT- oder CSV-Dateien kombinierenHallo,
Ich bin neu in der JMP-Skripterstellung. Aus irgendeinem Grund funktioniert die Importeinstellung bei mir nicht, wenn ich mehrere Textdateien kombiniere. Ich kann die verketteten Dateien sehen. In meinem Fall beginnt der Spaltenname bei 11 und die Daten beginnen bei 12. Die kombinierten Dateien beginnen jedoch bei Spalte 1 statt bei 11. Bitte geben Sie an, was ich übersehe?
Danke
Betreff: Mehrere TXT- oder CSV-Dateien kombinierenIch habe eine Lösung dafür erstellt, bei der die Dateien in das temporäre Verzeichnis kopiert und umbenannt werden. Da ich keine Möglichkeit sehe, eine Datei anzuhängen, ist hier der Code
names default to here (1);
Clear Symbols();
//Import settings, sometimes CSV files aren't exaclty formatted as CSV. Add import settings
//This is an expression to use later in the Open argument.
//Column names start on the second row, and are semicolon delimited
importset=expr( Import Settings(
End Of Line( CRLF, CR, LF ),
End Of Field( Comma, Other( ";" ), CSV( 0 ) ),//use ";" as a delimiter too
Strip Quotes( 1 ),
Use Apostrophe as Quotation Mark( 0 ),
Scan Whole File( 1 ),
Treat empty columns as numeric( 0 ),
CompressNumericColumns( 0 ),
CompressCharacterColumns( 0 ),
CompressAllowListCheck( 0 ),
Labels( 1 ),
Column Names Start( 2 ),//starting on second row
Data Starts( 3 ),//data starts on 3rd row
Lines To Read( "All" ),
Year Rule( "20xx" )
));
//set up variables with starting values
filelist={}; //empty list
//launch dialog to get the file location
prefilepath = munger(Pick Directory( "Browse to the Directory of the .txt / .csv files " ),1,"/","");
If( Host is( Mac ),
filepath="/"||prefilepath,
filepath = Convert File Path( prefilepath, Windows )
);
prefilelist = Files In Directory( filepath );
n2=nitems(prefilelist);
//filter out any non-txt or csv files
For( i2 = 1, n2 >= i2, i2++,
file=(prefilelist[i2]);
If( Item( 2, prefilelist[i2], "." ) == "txt" | Item( 2, prefilelist[i2], "." ) == "csv",
Insert Into( filelist,file),
show(file)
)
);<BR />
nf=nitems(filelist); //number of items in the working list
tempDir = "$TEMP\JMP\";
Create Directory(tempDir); //create the temp folder in the "%temp%" windows directory
//for each .csv file found on the server
For( i3 = 1 , i3 <= nf, i3++,
copyFileName = filelist[i3];
csvPos = Contains(filelist[i3],".csv"); //determine where in the filename .csv is
newFileName = Left(copyFileName, csvPos + 3 ); //determine the filename without the extra bits after .csv
Copy File (filepath||filelist[i3], tempDir||copyFileName);//copy the file to the temp folder
Rename File (tempDir||copyFileName, newFileName);//rename the file without the extra bits after .csv
filelist[i3] = newFileName; //replace the reference in the array to this file
);//end of the for loop
cctable= New Table( "Combined data table ");//make an empty table
cctable<<NEW column=""></NEW>Betreff: Mehrere TXT- oder CSV-Dateien kombinierenIch habe einige Probleme, dies zum Laufen zu bringen.Ich denke, das Problem besteht darin, dass ich Dateien verwende, die im Wesentlichen durch Kommas getrennte Textdateien sind, aber die Erweiterung .log haben.
Ich habe den Text in Ihrem Code in ein Protokoll geändert:
Item( -1, prefilelist[i2], "." ) == "log"
Ich erhalte eine Fehlermeldung von
Send erwartet ein skriptfähiges Objekt beim Zugriff oder bei der Auswertung von „Send“, dt << /*###*/Run Formulas() /*###*/
bei:
dt<< Formeln ausführen();
Wenn ich die Erweiterungen meiner Dateien in .txt ändere, funktioniert es.Allerdings möchte ich Tausende von Dateien kombinieren und täglich kommen Dutzende hinzu. Gibt es eine Möglichkeit, dies mit Dateien zum Laufen zu bringen, die die Erweiterung .log haben?
2. Frage.
Meine Dateien enthalten keine Kopfzeilen.Gibt es eine Möglichkeit, die Dateien zu kombinieren und dann Header zur Datentabelle hinzuzufügen?Derzeit wird die oberste Zeile der ersten Datei verwendet und daraus ein Header gemacht, der alle Daten enthält.
Vielen Dank für jede Hilfe.
Betreff: Mehrere TXT- oder CSV-Dateien kombinierenIch möchte mich nur bei dir bedanken, Byron. Das ist ein tolles und praktisches Beispiel.
Dieses Skript spart mir so viel Zeit!!!
Dieses Skript erledigt innerhalb von Sekunden das, was mich Stunden und Stunden Arbeit gekostet hat.
Danke schön!!!
Betreff: Mehrere TXT- oder CSV-Dateien kombinieren<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Der gleiche Ansatz funktioniert mit „join“. Versuchen Sie einfach, das Concat-Argument durch ein Join-Argument zu ersetzen.(Führen Sie den Join manuell durch und kopieren Sie dann das Quellskript in die resultierende Tabelle, um ein Beispiel dafür zu erhalten, wie das Join-Argument aussehen würde
Betreff: Mehrere TXT- oder CSV-Dateien kombinierenGibt es eine einfache Möglichkeit, mehrere TXT- oder CSV-Dateien mithilfe von JOIN nebeneinander zu kombinieren, anstatt sie vertikal mit zu kombinieren? Verketten In Kombinieren Sie txt Tables.jsl ?
Betreff: Mehrere TXT- oder CSV-Dateien kombinierenHallo Byron, dieses Skript funktioniert großartig. Ich habe geringfügige Änderungen vorgenommen, um eine Teilmenge der Daten aus den geöffneten Dateien auszuwählen, Spalten hinzuzufügen, Zeichen in numerische Zeichen zu ändern usw. Eine Frage, die ich hatte, ist, ob es eine einfache Möglichkeit gibt, das Skript so zu ändern, dass der Ordner angegeben wird, in dem sich die Dateien befinden und nicht ein promptes Popup?
Danke
TS
Betreff: Mehrere TXT- oder CSV-Dateien kombinierenDieses Skript läuft nicht auf meinem System: Mac OS X 10.10.5 + JMP Pro 12.1.0
Betreff: Mehrere TXT- oder CSV-Dateien kombinierenJa, der negative Verweis ist praktisch und funktioniert in fast allen Funktionen, die auf die Zeichenposition verweisen, sowie an einigen Stellen, die Sie vielleicht nicht erwarten würden. Stellen Sie sich zum Beispiel vor, Sie hätten -1 Dezimalstellen.
Betreff: Mehrere TXT- oder CSV-Dateien kombinierenHallo Bryon und alle,
Ich konnte ein kleines Update hinzufügen: nachgestellte Dateierweiterungen wie .csv oder .txt aus dem Namen der Quellspalte entfernen:
also im letzten Abschnitt statt:
jeden Wert festlegen (filenow)
Ich fügte hinzu :
jeden Wert festlegen (remove (filenow,-4,-1))
Ich war überrascht, dass die negative Referenz funktioniert hat!
Betreff: Mehrere TXT- oder CSV-Dateien kombinierenHallo Byron,
Schönes Skript und funktioniert hervorragend in JMP 12. Ich habe mich gefragt, wie man mit dem Lesen der Quelldatendateien ab einer bestimmten Zeile beginnen kann. Wenn Sie so wollen, kürzen Sie die Header-Informationen ab.Beginnen Sie beispielsweise mit einer Zeile, die mit dem Wort „CH“ beginnt. Wenn alle Quelldateien das gleiche Format haben?
Betreff: Mehrere TXT- oder CSV-Dateien kombinierenHallo Byron,
Es passiert nur in diesem Skript. Nach der Ausführung des Skripts wird im Protokollfenster der leere Fehler „NItem()“ angezeigt. Also kopiere ich einfach das gesamte Skript und füge es in ein neues Skriptfenster ein, dann läuft es einwandfrei.
Danke
Betreff: Mehrere TXT- oder CSV-Dateien kombinierenIch bin mir nicht sicher, ob ich die Frage verstehe. Wird dieses Verhalten mit anderen Skripten repliziert?
Betreff: Mehrere TXT- oder CSV-Dateien kombinierenHallo Byron,
Vielen Dank für dieses wertvolle Skript. Ich verwende dieses Skript, um mehrere TXT-Dateien hinzuzufügen. Es wird jedoch ausgeführt, nachdem dasselbe Skript in ein neues Skript kopiert wurde. Ich möchte fragen, warum es nicht ausgeführt wird, wenn dasselbe Skript im ersten Versuch geöffnet wird. Vielen Dank für die Antwort im Voraus. Dieses Skript ist sehr hilfreich.
Betreff: Mehrere TXT- oder CSV-Dateien kombinierenSean,
Auf dem MAC sind die Dialogfenster zur Auswahl eines Verzeichnisses bzw. zur Auswahl einer Datei identisch. Das Skript sucht nach Ihnen, um ein Verzeichnis zu identifizieren, das CSV- und/oder TXT-Dateien enthält. Das Skript ermöglicht derzeit die Verkettung von CSV- und TXT-Dateien in der Dateiliste. Wenn Sie eine stärkere Einschränkung wünschen, bearbeiten Sie einfach den Dateityp, den Sie aus diesem Teil des Skripts ausschließen möchten.
//filter out any non-txt or csv files
For( i2 = 1, n2 >= i2, i2++,
file=(prefilelist[i2]);
If( Item( 2, prefilelist[i2], "." ) == "txt" | Item( 2, prefilelist[i2], "." ) == "csv",
Insert Into( filelist,file),
show(file)
)
);
Irgendwie cool wäre es, wenn das Skript eine Liste der Dateierweiterungen im ausgewählten Verzeichnis zurückgeben würde und der Benutzer dann die Dateitypen abhaken könnte, die zur Dateilistenvariablen hinzugefügt werden sollen.
Wenn Sie Zeit für die Skripterstellung haben, veröffentlichen Sie bitte das aktualisierte Skript!
Beste grüße,
Byron
Betreff: Mehrere TXT- oder CSV-Dateien kombinierenBryan,
Ich verwende JMP 10.0.0 unter OS X 10.10.2. Wenn ich das Skript zum Auswählen der Dateien ausführe, wird ein Fenster geöffnet. Allerdings kann ich im geöffneten Fenster keine TXT- oder CSV-Datei auswählen. Ich bin nicht sicher, ob das Skript einer weiteren Überarbeitung für JMP (OS X-Version) bedarf. Könnten Sie bei der Lösung dieses Problems helfen? Danke schön.
Sean
Betreff: Mehrere TXT- oder CSV-Dateien kombinierenDanke, ich habe es jetzt verstanden.
Betreff: Mehrere TXT- oder CSV-Dateien kombinierenTal,
Würde es Ihnen etwas ausmachen, den Anhang noch einmal zu überprüfen?
Ich habe es wieder angebracht.
-Byron
Betreff: Mehrere TXT- oder CSV-Dateien kombinierenWo ist das Drehbuch?Ich kann es anscheinend nirgendwo finden.