Es gibt eine Möglichkeit, eine CSV-Datei zu importieren, bei der die Kopfzeilen nicht in der ersten Zeile beginnen. Sie geben einfach an, in welcher Zeile sich die Überschriften befinden.
Aber sagen wir mal, nachdem ich etwas mit der Datentabelle gemacht habe und sie wieder in das gleiche Format exportieren möchte, wie würde ich das machen? Nehmen wir an, ich habe den Text und er besteht nur aus einer Zeile.
Damit diese CSV in Excel so aussieht:

und in einem Notepad sieht es so aus:

Gibt es eine saubere Möglichkeit, dies rein in JSL zu tun?
So versuche ich es derzeit:
Den umgekehrten Vorgang zum Lesen einer CSV-Datei mache ich, indem ich CSV als Textdatei einlese ex , herausfinden, wo meine Kopfzeilen beginnen (sie können an verschiedenen Stellen beginnen) und die Zeilennummer als abrufen headersLocation , dann tun:
dtInt_ = Open(
Char To Blob( ex ),
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( headersLocation ),
Data Starts( headersLocation + 1 ),
Lines To Read( "All" ),
Year Rule( "20xx" )
),
Invisible
);Mein aktueller Plan besteht also darin, meine verarbeitete Datentabelle irgendwie in ein BLOB umzuwandeln und dann einfach die entgegengesetzte Funktion „Blob To Char()“ auszuführen, ihr etwas Text voranzustellen und sie als CSV-Datei zu speichern.
Ich bin dabei, die Datentabelle in ein Blob umzuwandeln, damit ich sie in Char umwandeln kann (was wahrscheinlich nicht der richtige Weg ist) oder die Datentabelle irgendwie als Text in das CSV-Format umwandeln (nicht als Datei speichern) kann.
Alternativ kann ich es in einer CSV-Datei speichern, diese Datei dann als Text zurücklesen, eine Zeile voranstellen und sie erneut speichern (wobei die temporäre CSV-Datei gelöscht wird) – aber das scheint eine sehr umständliche Vorgehensweise zu sein.
Danke,
M.
Ok, im Moment habe ich es so gelöst:
dt = Current Data Table();
filePath = "C:\TEMP\test.csv";
dt << Save(filePath);
dt_text = Load Text File(filePath);
out = "Custom Line \!n"||dt_text;
Save Text File(filePath, out, mode("Replace"));Gibt es eine sauberere Möglichkeit, die Datei nicht zweimal zu speichern? (Nehmen wir an, es handelt sich um mehrere Dateien, die selbst ziemlich groß sind – daher ist ein zusätzlicher Speichervorgang wichtig.)
Vielleicht möchten Sie die gesamte CSV-Datei mithilfe von in eine Textzeichenfolge einlesen
Textdatei laden()
Anschließend können Sie die Zeichenfolgenvariable nach den gewünschten Informationen analysieren.
Textdatei speichern()
Anschließend können Sie die Datei wieder auf Ihre Festplatte schreiben.
Jim,
Genau das mache ich in meiner aktuellen Lösung – siehe oben.
Das Problem ist, dass ich auch einige Datenmanipulationen vornehmen muss – also muss ich sie auch als Datentabelle laden.
Das Problem besteht darin, wie man die Datentabelle in Text umwandelt (im CSV-Format) ... Mir blieb nur die Möglichkeit, als CSV zu speichern und es dann erneut als Text zu laden, um die Zeichenfolge einzufügen. Das ist ein Speicher-/Ladezyklus mehr, als ich erhofft hätte – es wird teuer, wenn ich mehrere große Dateien habe.
Ich glaube, dass sich Ihr angegebener Ansatz als der effizienteste erweisen wird.
Danke, das möchte ich auch wissen.