Betreff: Mehrere CSV-Dateien importieren, aber ein Titelformatfehler muss von JSL geändert werdenWenn es möglich wäre, eine Beispiel-CSV-Datei (oder mehrere, wenn es verschiedene Arten davon gibt) bereitzustellen, würde dies die Arbeit erleichtern. Wenn nicht, könnten Sie eine „kaputte“ Datentabelle bereitstellen?
Betreff: Mehrere CSV-Dateien importieren, aber ein Titelformatfehler muss von JSL geändert werdenAls Referenz habe ich eine Beispieltabelle beigefügt
Importieren Sie mehrere CSV-Dateien, aber einige Titelformatfehler müssen von JSL geändert werdenIch versuche, mehrere CSV-Dateien zu importieren. Die Funktion „Mehrere Dateien importieren“ funktioniert nicht richtig, da das ursprüngliche Format der Datenspaltennamen zwei Probleme aufweist, die dazu führen, dass Titel und Daten nicht übereinstimmen
1. Der Name der Datenspalte sieht folgendermaßen aus: Datum, Uhrzeit, Name (ABC), (DEF), Größe, Gewicht usw
2. Die Dilim, die ich brauche, sind Platz und (und)
3. Allerdings steht vor „Datum“ ein zusätzliches Leerzeichen oder Tabulatorzeichen, sodass der Name der ersten Spalte zu „Spalte 1“ und nicht zu „Datum“ wird und der Titel im Vergleich zu den Daten um eine Spalte nach rechts verschoben wird
4. Der zweite Fehler ist (D, zwischen diesen beiden gibt es kein Leerzeichen für den Titel, daher werden sie als ein Titel behandelt, aber die Daten werden in ( und D zwei Spalten aufgeteilt, weil dazwischen ein Leerzeichen ist, sodass der Titel nach links verschoben wird eine Spalte mit Daten vergleichen
5. Der erste Fehler liegt immer vor dem ersten Spaltennamen „Datum“, aber der zweite Fehler „(D“ kann je nach Quelltool in einer anderen Reihenfolge erscheinen
Ich möchte eine JSL so schreiben, dass sie automatisch alle Titel und Spalten abgleicht, bin mir aber nicht sicher, wie das geht:
Ich denke, der erste Schritt besteht darin, Get Column Names() zu verwenden und dann die Namen zu analysieren, aber parse() und word() scheinen nicht zu funktionieren.
Ich stecke hier fest, bin beim Codieren wirklich unvorbereitet, vielen Dank für Ihre Hilfe im Voraus

Automatisierung und SkripterstellungBetreff: Mehrere CSV-Dateien importieren, aber ein Titelformatfehler muss von JSL geändert werdenBasierend auf dem zweizeiligen Beispiel würde ich höchstwahrscheinlich die CSV-Datei bereinigen (() entfernen und Leerzeichen reduzieren) und dann Open with Char to Blob() verwenden, um diese „feste“ Zeichenfolge in eine Datentabelle zu konvertieren
Names Default To Here(1);
str = Load Text File("$DOWNLOADS/sample CSV.csv");
lines = Words(str, "\!N");
data = Transform Each({line}, lines,
str = Collapse Whitespace(Substitute(line, {"(", ")"}, ""))
);
str = Concat Items(data, "\!N");
dt = Open(Char To Blob(str),
Import Settings(
End Of Line(CRLF, CR, LF),
End Of Field(Spaces, Space, 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(1),
Column Names Start(1),
First Named Column(1),
Data Starts(2),
Lines To Read("All"),
Year Rule("20xx")
)
);Betreff: Mehrere CSV-Dateien importieren, aber ein Titelformatfehler muss von JSL geändert werden@jthi
Deine Lösung ist großartig!
Eine Frage.Ihre Zeile, in der Sie die Klammern aus jeder Zeile entfernen, legen Sie fest
str = Collapse Whitespace(Substitute(line, {"(", ")"}, ""))
wobei Sie alle „(“ durch „)“ ersetzen und dann alle „)“ durch „“ ersetzen.
Mein Old-School-Ansatz wäre:
str = Collapse Whitespace(Substitute(line, "(", "", ")", ""))
wobei „(“ durch „“ und dann „)“ durch „“ ersetzt werden.
Hat Ihre Syntax einen Vorteil oder ist es nur eine persönliche Entscheidung?
Betreff: Mehrere CSV-Dateien importieren, aber ein Titelformatfehler muss von JSL geändert werdenEs ist nur meine persönliche Entscheidung. Wenn ich mehrere Dinge durch dasselbe ersetzen möchte, stelle ich Substitute im Allgemeinen eine Liste der zu ersetzenden Werte und dann den Wert einmal zur Verfügung. Wenn ich sie durch andere Dinge ersetzen möchte, verwende ich den von Ihnen gezeigten Ansatz. ODER wenn ich es dynamisch erstellen/eine Konfigurationsdatei haben muss, verwende ich zwei Listen
Names Default To Here(1);
str = "AA BB CC DD";
a = Substitute(str, {"AA", "BB"}, "11"); // a = "11 11 CC DD";
b = Substitute(str, "AA", "11", "BB", "22"); // b = "11 22 CC DD";
subs = ["AA" => "33", "BB" => "44"];
c = Substitute(str, subs << get keys, subs << Get Values); // c = "33 44 CC DD";
show(a, b, c);Betreff: Mehrere CSV-Dateien importieren, aber ein Titelformatfehler muss von JSL geändert werdenVielen Dank für Ihre Unterstützung. Diese Methode funktioniert gut für einzelne Dateien
Aber ich habe noch eine Frage: Ich habe viele Dateien mit demselben Format, die als eine JMP-Datei importiert werden müssen.
Es scheint also, dass ich bei dieser Methode sie einzeln öffnen und dann in einer Datei zusammenfassen muss
Deshalb war mein ursprünglicher Gedanke:
1. Verwenden Sie die Mehrfachimportfunktion
2. Spaltennamen abrufen
3. Verwenden Sie dann die Funktion „Spaltennamen neu kodieren“, um jeden Spaltennamen zu ändern
Betreff: Mehrere CSV-Dateien importieren, aber ein Titelformatfehler muss von JSL geändert werdenGibt es einen bestimmten Grund, warum Sie Folgendes nicht tun konnten?
- Erhalten Sie eine Liste der Dateien, an denen Sie interessiert sind
- Verwenden Sie „For Each“, um sie zu durchlaufen
- Analysieren Sie innerhalb der Schleife die Dateien und verketten Sie sie zu einer Tabelle, die Sie zuerst öffnen
Sie könnten versuchen, auch die Spalten zu reparieren, aber basierend auf Ihrem Beispiel war es viel einfacher, nur die CSV-Datei zu reparieren, als nach dem Importieren der Werte mit Spaltennamen herumzuspielen und/oder Werte zu verschieben
Betreff: Mehrere CSV-Dateien importieren, aber ein Titelformatfehler muss von JSL geändert werdenEs könnte auch eine gute Option sein, das Programm zu reparieren, das die Datei generiert. Das ist keine Standard-CSV-Datei und ich glaube auch nicht, dass ein anderes Programm sie korrekt analysieren kann.
Betreff: Mehrere CSV-Dateien importieren, aber ein Titelformatfehler muss von JSL geändert werdenDatentabellen verketten zeigt einen Weg, dies zu tun
Betreff: Mehrere CSV-Dateien importieren, aber ein Titelformatfehler muss von JSL geändert werdenIch habe versucht, die for-Schleife zu verwenden, um Dateien zu durchlaufen, aber es funktioniert nicht. Es sieht so aus, als wäre etwas schiefgegangen, als ich versucht habe, sie zu verknüpfen
Names Default To Here(1);
dir = Pick Directory("Select a directory");
filelist = Files In Directory(dir);
strings = {};
For(i = 1, i <= N Items(filelist), i++,
file = dir || Eval(Parse(filelist[i]));
str = Load Text File(file);
lines = Words(str, "\!N");
data = Transform Each({line}, lines,
str = Collapse Whitespace(Substitute(line, {"(", ")"}, ""))
);
str = Concat Items(data, "\!N");
strings = strings || str;
);
dt = Open(
Char To Blob(str),
Import Settings(
End Of Line(CRLF, CR, LF),
End Of Field(Spaces, Space, 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(1),
Column Names Start(2),
First Named Column(1),
Data Starts(3),
Lines To Read("All"),
Year Rule("20xx")
)
);
Betreff: Mehrere CSV-Dateien importieren, aber ein Titelformatfehler muss von JSL geändert werdenNach mehreren Versuchen importiert der folgende Code erfolgreich mehrere CSVs über eine Schleife, und das Format ist korrekt.
Aber ich habe immer noch zwei Probleme:
1. Ab der zweiten Datei werden die Kopfzeilen nicht als Spaltentitel ausgeschlossen, sondern als Daten in der Tabelle behandelt. Es gibt zwei Kopfzeilen, die erste Zeile enthält den Dateinamen und die zweite Zeile enthält durch Leerzeichen getrennte Titel
2. Ich würde gerne eine Dateinamenspalte hinzufügen, damit ich verschiedene Dateien analysieren kann, aber das ist keine Funktion zum Importieren mehrerer Dateien, die ich leicht erreichen kann?
Namen standardmäßig hier( 1 );
dir = Verzeichnis auswählen( "Verzeichnis auswählen" );
filelist = Dateien im Verzeichnis (dir);
mylist = {};
For( i = 1, i <= N Items( filelist ), i++,
Datei = Verzeichnis || „/“ || Dateiliste[i];
str = Textdatei laden (Datei);
Zeilen = Wörter(str, "\!N");
data = Transform Each({line},lines,
line = Collapse Whitespace(Substitute(line, {"(", ")"}, ""))
);
Modifiedstr = Concat Items(data, "\!N");
mylist[i] = Modifiedstr;
);
dt = Öffnen(
Char To Blob( Concat Items( mylist, "\!N" ) ),
Importeinstellungen(
Zeilenende (CRLF, CR, LF),
Ende des Feldes (Leerzeichen, Leerzeichen, CSV( 0 ) ),
Strip Quotes( 1 ),
Verwenden Sie Apostroph als Anführungszeichen (0),
Verwenden Sie regionale Einstellungen (0),
Behandeln Sie leere Spalten als numerisch (0),
Numerische Spalten komprimieren (0),
Zeichenspalten komprimieren (0),
Komprimieren Sie die Zulassungslistenprüfung (0),
Etiketten( 1 ),
Spaltennamen Start( 2 ),
Erstgenannte Spalte( 1 ),
Datenstarts( 3 ),
Zu lesende Zeilen( „Alle“),
Jahresregel( „20xx“)
)
);
Betreff: Mehrere CSV-Dateien importieren, aber ein Titelformatfehler muss von JSL geändert werdenErstellen Sie keine riesige Zeichenfolge, sondern erstellen Sie Datentabellen nacheinander und verketten Sie diese nach und nach. Wenn Sie JSL-Skripte veröffentlichen, verwenden Sie bitte auch „JSL-Skript einfügen“.
da es die Lesbarkeit deutlich erleichtert.
</CODE></PRE>
<P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><span class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><img src="https://us.v-cdn.net/6038925/uploads/images/60013iEF81464ED8426C0C/jthi_2-1703167262034.png" role="button" title="jthi_2-1703167262034.png" alt="jthi_2-1703167262034.png" /></span></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></P>
<P> </P></LINGO-BODY><LINGO-SUB id="lingo-sub-711549" slang="en-US" mode="NONE">Betreff: Mehrere CSV-Dateien importieren, aber ein Titelformatfehler muss von JSL geändert werden</LINGO-SUB><LINGO-BODY id="lingo-body-711549" slang="en-US" mode="NONE"><P><A href="https://community.jmp.com/t5/user/viewprofilepage/user-id/14366" target="_blank">@jthi</A> ist richtig, aber wenn Sie die Zeichenfolgen weiterhin verketten möchten, sind einige Änderungen erforderlich.<STRONG>Dies schlägt fehl, wenn die Verkettung mehr als 2 GB Zeichen umfasst, da dies die längste Zeichenfolge ist, die JMP verarbeiten kann.</STRONG></P>
<P>Idee:</P>
<PRE><CODE class=" language-jsl">
For( i = 1, i <= N Items( filelist ), i++,
file = dir || "/" || filelist[i];
str = Load Text File( file );
lines = Words(str, "\!N");
header1 = RemoveFrom(lines, 1); // remove the first line, two times.
header2 = RemoveFrom(lines, 1); // (removes both header lines.)
data = Transform Each({line}, lines,
// prepend the file name to each data line
filelist[i] || " " || Collapse Whitespace(Substitute(line, {"(", ")"}, ""));
);
modifiedstr = Concat Items(data, "\!N");
mylist[i] = modifiedstr;
);
header2 = "filename" || header2; // add the column name "filename"
insertInto(mylist,header2,1); // check the order of the arguments, the goal
insertInto(mylist,header1,1); // is to push these onto the front of the list
// now do the import...Names Default To Here(1);
dir = "$DOWNLOADS/New Folder (7)";
filelist = Files In Directory(dir);
mylist = {};
dt_collector = Empty();
For(i = 1, i <= N Items(filelist), i++,
file = dir || "/" || filelist[i];
str = Load Text File(file);
lines = Words(str, "\!N");
data = Transform Each({line}, lines,
line = Collapse Whitespace(Substitute(line, {"(", ")"}, ""))
);
modifiedstr = Concat Items(data, "\!N");
dt = Open(
Char To Blob(modifiedstr),
Import Settings(
End Of Line(CRLF, CR, LF),
End Of Field(Spaces, Space, CSV(0)),
Strip Quotes(1),
Use Apostrophe as Quotation Mark(0),
Use Regional Settings(0),
Treat empty columns as numeric(0),
Compress Numeric Columns(0),
Compress Character Columns(0),
Compress Allow List Check(0),
Labels(1),
Column Names Start(1),
First Named Column(1),
Data Starts(2),
Lines To Read("All"),
Year Rule("20xx")
),
invisible
);
dt << Set Name(filelist[i]);
dt << New Column("Source", Character, Nominal, << Set Each Value((dt << get name)));
If(!Is Empty(dt_collector),
dt_collector << Concatenate(
dt,
Append to first table
);
Close(dt, no save);
,
dt_collector = dt;
);
);
ungetestet, aber ungefähr richtig. Suchen Sie nach InsertInto() und RemoveFrom(); Ich habe JMP im Moment nicht geöffnet. Die Idee besteht darin, jedes Mal die ersten beiden Zeilen zu entfernen (und zu erfassen) und nach dem Erfassen und Stapeln die ersten beiden Zeilen mit dem zusätzlichen Spaltennamen an den Anfang zu stellen. Und im Inneren tragen Sie für jede Zeile den Dateinamen ein.
Betreff: Mehrere CSV-Dateien importieren, aber ein Titelformatfehler muss von JSL geändert werdenVielen Dank für Ihre Unterstützung, ich habe in diesem JSL-Projekt wirklich viel gelernt.