AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Textdatei einlesen u. drucken

Ein Thema von Sturmrider · begonnen am 3. Apr 2006 · letzter Beitrag vom 4. Apr 2006
Antwort Antwort
Seite 1 von 3  1 23      
Sturmrider

Registriert seit: 12. Mär 2006
30 Beiträge
 
#1

Textdatei einlesen u. drucken

  Alt 3. Apr 2006, 19:20
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 *noch absoluter Anfänger in Delphi ist*
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Textdatei einlesen u. drucken

  Alt 3. Apr 2006, 19:26
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);
Markus Kinzler
  Mit Zitat antworten Zitat
Sturmrider

Registriert seit: 12. Mär 2006
30 Beiträge
 
#3

Re: Textdatei einlesen u. drucken

  Alt 3. Apr 2006, 19:27
Aber damit wird die Datei doch nur eingelesen oder? Gedruckt wird da doch nichts, oder?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Textdatei einlesen u. drucken

  Alt 3. Apr 2006, 19:37
Sorry, das fehlt natürlich noch: Dieser Code schreibet die Werte in ein StringGrid

Delphi-Quellcode:
...
    for i := 0 to sl.Count do
    begin
      StringGrid.Cells[i,j] := sl.Strings[i]
    end;
    inc(j);
...
    griddruck(stringgrid,0,0,1);
...
Anschließen kannst du es mit diesem Code von Detlef Brettschneider drucken:

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;
Markus Kinzler
  Mit Zitat antworten Zitat
Sturmrider

Registriert seit: 12. Mär 2006
30 Beiträge
 
#5

Re: Textdatei einlesen u. drucken

  Alt 3. Apr 2006, 19:45
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?)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Textdatei einlesen u. drucken

  Alt 3. Apr 2006, 19:51
Zitat von Sturmrider:
(schaaaaade, dass die Scripts nicht auskommentiert sind )
Welche Skripts?
Zitat:
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?)
das ist eine Prozedur welche du als Methode, Globale Prozedur oder Subprozedur nutzen kannst. Sie stammt aus der Delphi-Source. IDie Procedure erwartet vier Parameter. Dem ersten Parameter muss das zu druckende StringGrid übergeben werden (z.B. StringGrid1), dem zweiten Parameter den linken und oberen Rand beim Drucken. Der vierte Parameter ist für die Skalierung zuständig.
Markus Kinzler
  Mit Zitat antworten Zitat
Sturmrider

Registriert seit: 12. Mär 2006
30 Beiträge
 
#7

Re: Textdatei einlesen u. drucken

  Alt 3. Apr 2006, 19:57
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;
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Textdatei einlesen u. drucken

  Alt 3. Apr 2006, 20:08
Wenn sichergestellt ist das keine Kommas in der datei vorkommen kann mann statt .DelimitedText .CommText verwenden und die Trenner '|' vorher durch Kommas ersetzen: StringReplace( s, '|', ',', rfReplaceAll); Ich habe auch den Originalbeitrag gefunden
Markus Kinzler
  Mit Zitat antworten Zitat
Sturmrider

Registriert seit: 12. Mär 2006
30 Beiträge
 
#9

Re: Textdatei einlesen u. drucken

  Alt 3. Apr 2006, 20:17
Danke, aber das hier funktioniert leider immer noch nicht uu:
Delphi-Quellcode:
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;
es kommt die Fehlermeldung: Undefinierter Bezeichner: 'StringReplace'
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Textdatei einlesen u. drucken

  Alt 3. Apr 2006, 20:21
Überprüfe mal ob die Unit SysUtils eingebunden ist.
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz