![]() |
Textdatei einlesen u. drucken
Hi @all
Ich habe da eine ziemlich dringende/eilige Frage bezüglich einem Delphi-Source: Wie kann ich aus einer Textdatei z.B. folgendes einlesen und dann schön in einer Tabelle untereinander aufgelistet ausdrucken? 13.01.2001|Homepage|Seite|URL|18|18:30|19:15|Besch reibung|Hits| 28.03.2002|Testseite|blabla|test|20|18:20|20:30|ad rgdfg|adhdfadh| (das Trennzeichen "|" heißt neue Spalte. Nach jedem 9. "|" kommt ein Zeilenumbruch und sollte neue Zeile in der Tabelle bedeuten.) Bitte helft mir :oops: *noch absoluter Anfänger in Delphi ist* |
Re: Textdatei einlesen u. drucken
Z.B. mit Hilfe einet StringListe.
Delphi-Quellcode:
var
sl: TStrings; tf: TextFile; s: string; ... sl := TStringList.Create; sl.Delimiter := '|'; AssignFile( <dateiname>, tf); Reset( tf); while not eof( tf) do begin ReadLn( tf, s); sl.DelimitedText := s; end; CloseFile(tf); |
Re: Textdatei einlesen u. drucken
Aber damit wird die Datei doch nur eingelesen oder? Gedruckt wird da doch nichts, oder?
|
Re: Textdatei einlesen u. drucken
Sorry, das fehlt natürlich noch: Dieser Code schreibet die Werte in ein StringGrid
Delphi-Quellcode:
Anschließen kannst du es mit diesem Code von Detlef Brettschneider drucken:
...
for i := 0 to sl.Count do begin StringGrid.Cells[i,j] := sl.Strings[i] end; inc(j); ... griddruck(stringgrid,0,0,1); ...
Delphi-Quellcode:
Uses
Printers, Grids; procedure GridDruck(grd:TStringGrid;links,oben:word;scal:double); var x,y,li,ob,re,un,waag,senk,h,a: integer; s: string; function rech(i,j:integer):integer; begin result:=round(((i*j) / 72) * scal); end; begin if scal > 0 then begin waag:=getdevicecaps(printer.handle,logpixelsx); senk:=getdevicecaps(printer.handle,logpixelsy); links:=rech(links,waag); oben:=rech(oben, senk); a:=rech(3,waag); li:=getdevicecaps(printer.handle,physicaloffsetx)+1+links; with printer do begin s:='Grid-Druck'; title:=s; BeginDoc; canvas.font:=grd.font; canvas.font.size:=round((grd.font.size / 0.72) * scal); h:=canvas.textheight(s); canvas.pen.color:=$333333; for x:=0 to grd.colcount-1 do begin if grd.gridlinewidth > 0 then begin canvas.pen.style:=pssolid; canvas.pen.width:=1; end else canvas.pen.style:=psclear; ob:=getdevicecaps(printer.handle,physicaloffsety)+1+oben; re:=li+rech(grd.ColWidths[x]+1,waag); for y:=0 to grd.rowcount-1 do begin un:=ob+rech(grd.RowHeights[y]+1,senk); if (x < grd.fixedcols) or (y < grd.fixedrows) then canvas.brush.color:=grd.fixedcolor else canvas.brush.color:=grd.color; canvas.rectangle(li,ob,re,un); canvas.brush.style:=bsclear; canvas.textrect(rect(li+a,ob+1,re-a,un-1), li+a,ob+(un-ob-h)div 2,grd.Cells[x,y]); ob:=un; end; canvas.brush.color:=clwhite; canvas.pen.style:=psclear; canvas.rectangle(li,ob+1,re,ob+h); li:=re; end; enddoc; end; end; end; |
Re: Textdatei einlesen u. drucken
Achso, kein Problem ^_____^ Danke schoneinmal an dieser Stelle ^^
(schaaaaade, dass die Scripts nicht auskommentiert sind :( ) Ich habe da aber noch eine Frage: Dieses procedure GridDruck(grd:TStringGrid;links,oben:word;scal:dou ble); was genau ist das? Wie kann ich die an einen Drucken-Button "heften"? Ist das eine Subprocedure? (und wenn ja, was sind das für Werte die mit der Subprocedure übergeben werden müssen?) |
Re: Textdatei einlesen u. drucken
Zitat:
Zitat:
![]() |
Re: Textdatei einlesen u. drucken
Na das von Detlef Brettschneider ^---^ bzw. den Source
Ich habe jetzt einfach mal das hier geschrieben, was ja dann eigentlich funktionieren müsste... Aber das tut es leider nicht...es kommt ein Fehler: Undefinierter Bezeichner: 'Delimiter'. Was ich vergessen habe zu erwähnen...ich Arbeite leider nur mit Delphi5 und bin leider schulisch gezwungen dabei zu bleiben...(auch wenns Delphi7 etc. kostenlos für Schüler/Studenten immer mal wieder auf der BornlandHP zum free Download gibt...)
Delphi-Quellcode:
procedure TForm1.DruckenClick(Sender: TObject);
var sl: TStrings; tf: TextFile; s: string; begin sl := TStringList.Create; sl.Delimiter := '|'; AssignFile('posts.ini', tf); Reset( tf); while not eof( tf) do begin ReadLn( tf, s); sl.DelimitedText := s; end; CloseFile(tf); for i := 0 to sl.Count do begin StringGrid.Cells[i,j] := sl.Strings[i] end; inc(j); griddruck(stringgrid,0,0,1); end; procedure GridDruck(grd:TStringGrid;links,oben:word;scal:double); var x,y,li,ob,re,un,waag,senk,h,a: integer; s: string; function rech(i,j:integer):integer; begin result:=round(((i*j) / 72) * scal); end; begin if scal > 0 then begin waag:=getdevicecaps(printer.handle,logpixelsx); senk:=getdevicecaps(printer.handle,logpixelsy); links:=rech(links,waag); oben:=rech(oben, senk); a:=rech(3,waag); li:=getdevicecaps(printer.handle,physicaloffsetx)+1+links; with printer do begin s:='Grid-Druck'; title:=s; BeginDoc; canvas.font:=grd.font; canvas.font.size:=round((grd.font.size / 0.72) * scal); h:=canvas.textheight(s); canvas.pen.color:=$333333; for x:=0 to grd.colcount-1 do begin if grd.gridlinewidth > 0 then begin canvas.pen.style:=pssolid; canvas.pen.width:=1; end else canvas.pen.style:=psclear; ob:=getdevicecaps(printer.handle,physicaloffsety)+1+oben; re:=li+rech(grd.ColWidths[x]+1,waag); for y:=0 to grd.rowcount-1 do begin un:=ob+rech(grd.RowHeights[y]+1,senk); if (x < grd.fixedcols) or (y < grd.fixedrows) then canvas.brush.color:=grd.fixedcolor else canvas.brush.color:=grd.color; canvas.rectangle(li,ob,re,un); canvas.brush.style:=bsclear; canvas.textrect(rect(li+a,ob+1,re-a,un-1), li+a,ob+(un-ob-h)div 2,grd.Cells[x,y]); ob:=un; end; canvas.brush.color:=clwhite; canvas.pen.style:=psclear; canvas.rectangle(li,ob+1,re,ob+h); li:=re; end; enddoc; end; end; end; |
Re: Textdatei einlesen u. drucken
Wenn sichergestellt ist das keine Kommas in der datei vorkommen kann mann statt .DelimitedText .CommText verwenden und die Trenner '|' vorher durch Kommas ersetzen:
Delphi-Quellcode:
Ich habe auch den
StringReplace( s, '|', ',', rfReplaceAll);
![]() |
Re: Textdatei einlesen u. drucken
Danke, aber das hier funktioniert leider immer noch nicht uu:
Delphi-Quellcode:
es kommt die Fehlermeldung: Undefinierter Bezeichner: 'StringReplace'
procedure TForm1.DruckenClick(Sender: TObject);
var sl: TStrings; tf: TextFile; s: string; begin sl := TStringList.Create; sl.StringReplace( s, '|', ',', rfReplaceAll); AssignFile('posts.ini', tf); Reset( tf); while not eof( tf) do begin ReadLn( tf, s); sl.StringReplace( s, '|', ',', rfReplaceAll) := s; end; CloseFile(tf); for i := 0 to sl.Count do begin StringGrid.Cells[i,j] := sl.Strings[i] end; inc(j); griddruck(stringgrid,0,0,1); end; |
Re: Textdatei einlesen u. drucken
Überprüfe mal ob die Unit SysUtils eingebunden ist.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz