| Autor |
Beitrag |
Studio54
Hält's aus hier
Beiträge: 5
|
Verfasst: Mo 30.03.09 10:09
Hay
Ich hatte zuvor eine Excel Datei und hab dort, die einzellnen Zeilen und Zellen ausgelesen gehabt.
Da es meine Aufgabe ist dieses Programm jetzt auf mehreren Rechnern zum laufen zu kriegen, hab ich mir gedacht, dass ich einfach die Excel Datein in Textdateien um schreibe.
Gesagt getan
Ein Beispiel hierfür:
| Zitat: | 100#Eintritt#8,00
---#Getränke#
200#Bier 0,33 l#1,50
201#Bier 0,5 l#2,50
202#Bier 1,0 l#4,80
203#Softdrink 0,2 l#1,50
204#Softdrink 0,5 l#3,00
205#Cocktails#5,50
206#Caffee / Tee#2,00
207#Wasser 0,33 l#1,10
208#Sekt Glas 0,2 l#3,50
209#Sekt Flasche 0,7 l#15,00
210#Wein Flasche 0.7 l#20,00
211#Shooter / Kurze 2 cl#2,00
212#Longdrinks#5,00 |
Ich hab das Trennzeichen '#' benutzt.
Delphi-Quelltext 1:
| AssignFile(Excel, 'Produktlisten\'+ Absender +'.txt'); |
Damit ögffne ich die Txt Datei.
Excel hab ich als TextFile deklariert.
Wie schaffe ich es, dass ich jetz jede einzellne Zelle abrufen kann(Eine Zelle der Textinhalt vor einer '#'.
Moderiert von Narses: Zitat entfärbt
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Mo 30.03.09 10:18
ich denke dieser artikel kann dir dabei helfen, natürlich braucht er noch einige anpassungen
*Klick mich, ich will es*
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
Studio54 
Hält's aus hier
Beiträge: 5
|
Verfasst: Mo 30.03.09 10:28
Hay Michael,
leider sind wir nur im Grundkurs Informatik und unser Horizont reicht leider nicht so weit.
Gibt es nicht eine Art Bauernlösung für uns?
Vor dem Parsen stehen wir grade vor einem anderen Problem.
Wir haben es mit
Delphi-Quelltext
(Excel ist wieder nur ein Bezeichner für eine TextFile)
Das hat leider nicht so hingehaun wie wir es uns gedacht haben
Delphi-Quelltext 1:
| Zelle :=ReadLN(Excel, Zeile until '#'); |
Wie gesgat wir sind Delphi Bauern sozusagen.
MFG
Studio54
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Mo 30.03.09 10:32
kannst du vl. ein bisschen quellcode herzeigen, weil ich hab keine ahnung wie du das realisierst. Mit einem TFile? Wie wollt ihr das ganze anzeigen lassen? in einem TStringGrid?
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
Studio54 
Hält's aus hier
Beiträge: 5
|
Verfasst: Mi 01.04.09 08:01
So bin wieder am Rechner.
Hay Michael und alle anderen
Meine 1 ste Version
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| AssignFile(excel, 'Produktlisten\'+ Absender +'.txt'); Zeile := 0; Spalte:=1; Reset(Excel); i:=1; h:=1; ReadLN(Excel, Datensatz); showmessage(Datensatz); while (Datensatz <> ' ') do begin while Datensatz[i] <> '~' do begin if Datensatz[i]='#' then begin sgProdukte.Cells[Spalte-1,Zeile] := Copy(Datensatz, h, i-1); inc(i); h:=i+1; inc(Spalte); end else inc(i); end; ReadLN(Excel, Datensatz); inc(Zeile); Spalte:=1; sgProdukte.RowCount := sgProdukte.RowCount+1; end; end; |
Jedoch kriege ich nur eine EAccessViolation -.-
Version 2 mit TStringlist, dank den Hinweis von Michael
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| var Listen: TStringList; Zeile: string; begin Listen := TStringList.Create; try Listen.LoadFromFile('datei.txt'); Zeile := Listen[15]; finally Listen.Free; end; end; |
Jeoch krieg ich wieder nur eine EAccessviolation
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Mi 01.04.09 09:47
hmmm, ja, ne is klar.
mit dem befehl: Listen.Lines[15] greifst du auf, achtung, die 16te Zeile zu. Warum das so ist? Weil der Index einer Liste mit 0 beginnt, das heißt, für die erste zeile musst du 0 einsetzen, für die zweite 1, und so weiter.
So wenn du den Text nun Zeilenweise ausgeben magst, dann brauchst du eine Schleife. Ich persönlich mag For-Schleifen, deswegen setzen wir das jetzt einfach doch mal um:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| var Listen: TStringList; Zeile: string; iLauf: Integer; begin Listen := TStringList.Create; try Listen.LoadFromFile('datei.txt'); for iLauf := 0 to Listen.Lines.Count - 1 do Zeile := Listen[iLauf]; finally Listen.Free; end; end; |
Die geänderten Zeilen sind orange markiert.
So, da du das sicher schön formatiert ausgeben willst, in Spaltenform, brauchst du den Befehl Stringreplace. Versuch dich damit mal, wenns nicht geht, dann melde dich wieder.
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
|