ja, ja bitte!!!!
Verfasst: 04.11.2005 23:18
Ja bitte - und am besten auch gleich das Gegenstück zum AuslesenKiffi hat geschrieben:> Sollen wir Dir einen kleinen Beispielsource posten, der eine CSV-Datei
einliest?
Grüße ... Kiffi


Ja bitte - und am besten auch gleich das Gegenstück zum AuslesenKiffi hat geschrieben:> Sollen wir Dir einen kleinen Beispielsource posten, der eine CSV-Datei
einliest?
Grüße ... Kiffi
Na ich schätze mal dasselbe was ein SQL-Update macht, Daten ändern.vonTurnundTaxis hat geschrieben:@Mauli:
Was macht denn UpdateString()?
Kiffi und ich Diskutieren halt gerneKiffi hat geschrieben:ach! Wir streiten doch nicht. Wir diskutieren!freedimension hat geschrieben:*streitbarriere_erricht*
![]()
Eben deshalb sollte man erst garnicht mit CSV anfangen......grummel, grummel, grummelMauli hat geschrieben: ich habe mich mit SQL lange beschäftig und sehe wirklich ein, daß es eine großartige Sache ist, aber ich war schlichtweg zu Faul, das Programm (6000) Zeilen auf MySQL3 umzuschreiben.
Kann ich niemanden raten! (bei Professionellen Programmen)Mauli hat geschrieben:Finde es auch so sehr gut und kann es jedem nur Raten, erstmal damit zu arbeiten, bevor man sich ans SQL wagt. Ich bin sehr zufriefen und sehe keinen Grund zu wechseln.
äh, wenn Du mir jetzt noch den Unterschied zwischen Einlesen und Auslesen erklärst...hiltwin hat geschrieben:- und am besten auch gleich das Gegenstück zum AuslesenKiffi hat geschrieben:> Sollen wir Dir einen kleinen Beispielsource posten, der eine CSV-Datei einliest?
OK. Hier kommt der Code:hiltwin hat geschrieben:Ja bitte
Code: Alles auswählen
Global CsvLines.l, CsvFields.l
Procedure ReadCSV(sFile.s)
DefType.s sSeparator, sLine
DefType.l FF, lLineCounter, lFieldCounter, lMaxFieldCounter
sSeparator = ";"
CsvLines = -1
CsvFields = -1
FF = ReadFile(#PB_Any, sFile)
If FF
; Pass 1
; Determine count of lines and fields
While Eof(FF)=#False
sLine = ReadString()
If Trim(sLine) <> "" ; Line contains data?
lLineCounter + 1
lFieldCounter = CountString(sLine, sSeparator) + 1
If lMaxFieldCounter < lFieldCounter
lMaxFieldCounter = lFieldCounter
EndIf
EndIf
Wend
Debug "Found " + Str(lLineCounter) + " lines"
Debug "Found " + Str(lMaxFieldCounter) + " fields"
; Dimension Array with determined informations
CsvLines = lLineCounter - 1
CsvFields = lMaxFieldCounter - 1
Dim FieldArray.s(CsvLines, CsvFields)
; Pass 2
; Read Data
FileSeek(0) ; Jump to the start of the file
lLineCounter = 0
While Eof(FF)=#False
sLine = ReadString()
If Trim(sLine) <> "" ; Line contains data?
For lFieldCounter = 1 To CountString(sLine, sSeparator) + 1
FieldArray(lLineCounter, lFieldCounter-1) = StringField(sLine, lFieldCounter, sSeparator)
Next lFieldCounter
lLineCounter + 1
EndIf
Wend
CloseFile(FF)
Else
; Couldn't open file
EndIf
EndProcedure
Enumeration
#frmMain ; MainWindow
#ligView ; ListIconGadget
EndEnumeration
DefType.s sLine
DefType.l lField, lLine
ReadCSV("test.csv")
If CsvFields > -1 And CsvLines > -1
If OpenWindow(#frmMain, 0,0,420,200, #PB_Window_ScreenCentered|#PB_Window_SystemMenu, "Read CSV - Sample")
If CreateGadgetList(WindowID(#frmMain))
; Use a ListIconGadget to view the read data
ListIconGadget(#ligView, 0, 0, 420, 200, "Field0", 40, #PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect)
; Fill Columnheaders of ListIconGadget
For lField = 1 To CsvFields
AddGadgetColumn(#ligView, lField, "Field" + Str(lField), 40)
Next lField
; Fill data into ListIconGadget
For lLine = 0 To CsvLines
sLine = ""
For lField = 0 To CsvFields
sLine + FieldArray(lLine, lField)
If lField <> CsvFields
sLine + Chr(10)
EndIf
Next lField
AddGadgetItem(#ligView, lLine, sLine)
Next lLine
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
EndIf
EndIf
Code: Alles auswählen
00;01;02;03;04;05;06;07;08;09
10;11;12;13;14;15;16;17;18;19
20;21;22;23;24;25;26;27;28;29
30;31;32;33;34;35;36;37;38;39
40;41;42;43;44;45;46;47;48;49
50;51;52;53;54;55;56;57;58;59
60;61;62;63;64;65;66;67;68;69
70;71;72;73;74;75;76;77;78;79
80;81;82;83;84;85;86;87;88;89
90;91;92;93;94;95;96;97;98;99
Code: Alles auswählen
Artikelnummer0815;"Artikelbezeichnung;BlaBla";Artikelpreis
Noch eine kurze Anmerkung hierzu: Es kann natürlich auch vorkommen, dass in Feldern auch mal Hochkommata enthalten sind. Diese werden dann normalerweise verdoppelt dargestellt. Wenn das BlaBla aus obigem Beispiel also in Hochkommata stehen sollte müsste das so aussehen:Kiffi hat geschrieben:2.) Es kann sein, dass in einem Feld (beispielsweise der
Artikelbezeichnung oder -beschreibung) der Feldseparator (hier: das
Semikolon) als Satzzeichen verwendet wird. Damit dieses nicht als
Feldseparator angesehen wird, fasst man das Feld üblicherweise in
Textbegrenzer ein.
Beispiel:
Man sieht: Obige Zeile hat 3 (!) Felder, weil das Semikolon alsCode: Alles auswählen
Artikelnummer0815;"Artikelbezeichnung;BlaBla";Artikelpreis
Satzzeichen der Artikelbezeichnung zugehörig ist. Dafür sorgen die
Hochkommata am Anfang und Ende des Feldes.
Code: Alles auswählen
Artikelnummer0815;"Artikelbezeichnung;""BlaBla""";Artikelpreis