CSV Reader/Writer
Übersicht

ShamanBetreff: CSV Reader/Writer |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Diese kleinen Funktionen schreiben oder lesen CSV-Dateien.
Diese "Komma getrennten Datendateien" stellen Tabellen dar. Beispiel für eine solche Tabelle: Code: [AUSKLAPPEN] a1;b1;c1;d1 a2;b2;c2;d2 a3;b3;c3;d3 Dies ist eine Tabelle mit 4 Spalten (a-d) und 3 Zeilen (1-3). CSV-Dateien können von z.B. Exel und Calc exportiert werden. Der Seperator (Trennrt zwischen den Zellen) kann angegeben werden Exel benutzt immer ";" , bei Calc kann man zwischen ";" und "," auswählen (ohne Anführungszeichen natürlich) jetzt der Code zum Lesen von CSV-Dateien: Code: [AUSKLAPPEN] Rem bbdoc: Ließt eine CSV-Datei about: url kann ein String sein, dann wird eine Datei geladen/erstellt; <br> oder ein Stream, dann wird direkt in diesen Stream geschrieben. <br> arrayWidth und arrayHeight werden aus der Datei/Stream gelesen <br> arrayWidth: Breite der Tabelle (Spaltenanzahl) <br> arrayHeight: Höhe der Tabelle (Zeilenanzahl). <br> der Seperator ist normalerweise ein Semikolon (;) oder Komma (,). EndRem Function ReadCSV:String[,](url:Object,arrayWidth:Int Var,arrayHeight:Int Var,seperator:String=";") Local file:TStream Local name:String 'DebugStop If TStream(url)=Null Then name=String(url) file=ReadFile(name) Else file=TStream(url) EndIf If file=Null Then Print("No file found"); Return Null Local lineCount:Int=0 Local lines:String[1] Local line:String While(Eof(file)=0) line=file.ReadLine() If line="" Then Exit lineCount:+1 lines=lines[..lineCount] lines[lineCount-1]=line Wend If lineCount=0 Then Return Null arrayHeight=lineCount arrayWidth=lines[0].Split(seperator).length Local array:String[arrayHeight,arrayWidth] Local x:Int Local y:Int Local splitted:String[] For x=0 Until lineCount line=lines[x] splitted=line.Split(seperator) For y=0 Until splitted.length array[x,y]=splitted[y] Next Next If TStream(url)=Null Then CloseFile(file) Return array End Function und passend dazu zum schreiben: Code: [AUSKLAPPEN] Rem bbdoc: Schreibt eine CSV-Datei about: url kann ein String sein, dann wird eine Datei geladen/erstellt; <br> oder ein Stream, dann wird direkt in diesen Stream geschrieben. <br> Dass Source-Array sollte zuvor mit ReadCSV gelesen worden sein. <br> arrayWidth und arrayHeight sind die Rückgabewerte von ReadCSV. EndRem Function WriteCSV:Int(url:Object,array:String[,],arrayWidth:Int,arrayHeight:Int,seperator:String=";") Local file:TStream If TStream(url)=Null Then file=WriteFile(String(url)) Else file=TStream(url) EndIf If file=Null Then Print("Unable to write stream");Return 0 Local x:Int Local y:Int Local line:String For x=0 Until arrayHeight line="" For y=0 To (arrayWidth-2) line=line+array[x,y]+seperator Next y=arrayWidth-1 If y>=0 Then line=line+array[x,y] EndIf file.WriteLine(line) Next If TStream(url)=Null Then CloseFile(file) Return 1 End Function kleines Beispiel: Das geladene File kann z.B. die oben genannte Tabelle sein. Code: [AUSKLAPPEN] SuperStrict Local w:Int Local h:Int Print "CSV Testprogramm" Print "" Local array:String[,]=ReadCSV("tabelle1.csv",w,h,";") If array=Null Then RuntimeError("Error reading CSV") Local x:Int Local y:Int Local line:String Print "Ausgabe" For y=0 Until h line="" For x=0 Until w line=line+array[y,x]+";" Next Print line Next Print "Write: "+WriteCSV("test1.csv",array,w,h) |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group