Ich versuche, JSL zu schreiben, um mehrere Dateien einzubinden und sie miteinander zu verknüpfen, aber ich habe einige Dateien, bei denen die Kopfzeilen in Zeile 2 beginnen, und einige Dateien, bei denen die Kopfzeilen in Zeile 3 beginnen. Ich weiß nicht, welche Dateien Kopfzeilen in unterschiedlichen Zeilen haben, und ich versuche zu vermeiden, sie alle öffnen zu müssen, um das herauszufinden. Gibt es eine Möglichkeit, JSL zu schreiben, um nach der ersten Spaltenüberschrift (Zeit) zu suchen und dort mit dem Lesen zu beginnen?
CSV-ähnliche Dateien? Sind die zusätzlichen Zeilen am Anfang gut erkennbar? Alles leer? Standardschlüsselwörter? Sie könnten ein Skript verwenden, um die ersten N Bytes der Datei zu lesen und zu entscheiden, wie viele Zeilen beim CSV-Import übersprungen werden sollen. Schauen Sie sich die LoadTextFile-Funktion an, um das vorläufige Öffnen durchzuführen.
Ja, es handelt sich um CSV-Dateien.Einige haben in der ersten Zeile ein Datum, in der zweiten Zeile eine Fahrgestellnummer und dann beginnen die Kopfzeilen.Andere haben in der ersten Zeile das Datum, dann beginnen die Überschriften.Können Sie ein Beispiel für das Skript veröffentlichen, auf das Sie sich beziehen?
Etwas wie das.
// pick a test case...
f = savetextfile("$temp\deleteme.csv","1jan2000\!ntime,x,y,z\!n101,1,2,3\!n101,4,5,6");
//f = Save Text File( "$temp\deleteme.csv", "1jan2000\!nVIN\!ntime,x,y,z\!n102,1,2,3\!n102,4,5,6" );
text = Load Text File( f );
// count newlines before "time"
newline = "\!n\!r" | "\!r\!n" | "\!n" | "\!r";
n = 0;
Pat Match( // there are a lot of ways you could count newlines before "time"
text, // use the pattern matcher to loop through the text
Pat Pos( 0 ) +
Pat Repeat(
("time" + Pat Rem()) // found "time", skip to the end
| // OR...skip to the end of the line and count it
(Pat Break( "\!n\!r" ) + newline + Pat Test( n += 1; 1; ))
)
);
Show( n );
HEADERLINE = n + 1;
FIRSTDATALINE = n + 2;
Open(
f,
columns(
New Column( "time", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "x", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "y", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "z", Numeric, "Continuous", Format( "Best", 12 ) )
),
Import Settings(
End Of Line( CRLF, CR, LF ),
End Of Field( Comma, 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( HEADERLINE ),
First Named Column( 1 ),
Data Starts( FIRSTDATALINE ),
Lines To Read( "All" ),
Year Rule( "20xx" )
)
);
Vielen Dank! Das hat bei mir perfekt funktioniert und mir so viel Zeit gespart, alle CSV-Dateien zu öffnen, um sie zu bearbeiten!