Autor Beitrag
kostenix
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: Mo 24.05.04 13:15 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
  var Zeilenlaenge := 225;
  var dazu := 0;
  var Textzeile := 'T E X T';
  var leerzeichen := ' ';
  Size := Length(Textzeile);
  if (Size < Zeilenlaenge) then begin
    dazu := Zeilenlaenge - Size;
    x := 1;
    repeat
      Textzeile := Textzeile+leerzeichen;
      x := x+1;
    until
     x = dazu;
  end;
Writeln(F2, Textzeile);


wieso zeigt er es in der konsole mit 255 zeichen und in der textdatei mit weniger? in der textdatei wurden nur einpaar hinzugefügt...

PS: das macht der nur bei der letzten zeile so...

Moderiert von user profile iconPeter Lustig (13:20, 24.05.2004): Code- durch Delphi-Tags ersetzt


Zuletzt bearbeitet von kostenix am Mo 24.05.04 15:09, insgesamt 2-mal bearbeitet
FaTaLGuiLLoTiNe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 200
Erhaltene Danke: 5

Windows 7, Windows 8.1
Delphi XE
BeitragVerfasst: Mo 24.05.04 13:40 
Also erstmal ist das was du da machst irgendwie sehr kompliziert. Es hätte auch so gelöst werden können:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var Zeilenlaenge := 225;
var Textzeile := 'T E X T';
var Leerzeichen := ' ';

While (Length(Textzeile) < Zeilenlaenge)
 do Textzeile := Textzeile + Leerzeichen;
Writeln(F2, Textzeile);


Von einer Konsolenausgabe kann ich in deinem Quelltext nichts finden. Ich verstehe auch nicht ganz, was du damit meinst:

kostenix hat folgendes geschrieben:

PS: das macht der nur bei der letzten zeile so...


So wie ich das sehe behandelt diese Prozedur nur eine einzige Zeile. Deshalb kann ich dein Problem nicht ganz nachvollziehen.

_________________
<< FaTaLGuiLLoTiNe >>
Rhinoceroses don't play games!
kostenix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: Mo 24.05.04 13:52 
okay beschreibe ich mein programm.

am anfang werden 2 dateinamen eingegeben. eine die schon vorhanden ist (F1), und eine die erts angelegt werden soll (F2). das klappt auch wunderbar.

dann wird die erste zeile aus in die variable "Textzeile" geladen. diese wird überprüft ob sie 225 beinhaltet. wenn nicht wird sie mit leerzeichen aufgefüllt. und diese erste zeile wird sofort in die neue datei (F2) geschrieben. das klappt auch noch wunderbar:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
    Textzeile := ReadLine(Dateiname_alt,0);
    Size := Length(Textzeile);
    if (Size < Zeilenlaenge) then begin
        dazu := Zeilenlaenge - Size;
        for x := 1 to dazu do begin
          Textzeile := Textzeile+leerzeichen;
        end;
    end;
    Writeln(F2, Textzeile);


dann werden die zeilen zwischen der ersten und der letzten zeile auf einen bestimmten string durchsucht und aufgefüllt wenn der string vorhanden ist. wenn der string vorhanden ist wird die aufgefüllte textzeile in die neue datei geschrieben. die anzahl der zeilen variieren. das klappt auch wunderbar.

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
  Zeilen := AnzahlZeilen -1;
  i := 1;
  repeat
    Textzeile := ReadLine(Dateiname_alt,i);
    i := i-1;
    Size := Length(Textzeile);
    if POS('12345', Textzeile) = 119 then begin
      if (Size < Zeilenlaenge) then begin
          dazu := Zeilenlaenge - Size;
          for x := 1 to dazu do begin
            Textzeile := Textzeile+leerzeichen;
          end;
      end;
      Writeln(F2, Textzeile);
    end;
    i := i+1
  until
    i = Zeilen;


nun fehlt nur noch die letzte zeile aus der vorhandenen datei. diese wird ausgelesen und einfach nur aufgefüllt mit leerzeichen bis diese 225 zeichen enthält. und hier klappt es nicht mehr. wenn ich nach dem auffüllen des strings diese an der konsole ausgebe, dann zeigt er alle 225 zeichen an. wenn ich mir dann aber die neue textdatei anschaue, hat diese weniger...

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
  Textzeile := ReadLine(Dateiname_alt,AnzahlZeilen);
  Size := Length(Textzeile);
  if (Size < Zeilenlaenge) then begin
    dazu := Zeilenlaenge - Size;
    Writeln(dazu);
    x := 1;
    repeat
      Textzeile := Textzeile + leerzeichen;
      x := x+1;
    until
     x = dazu;
  end;
  Writeln(F2, Textzeile);


und das ist nun mein problem. die letzte zeile muss auch genau 225 zeichen enthalten... ansonsten kann ich das programm vergessen...
MartinPb
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 698



BeitragVerfasst: Mo 24.05.04 14:13 
Du machst es sehr kompliziert. Dir ist aber klar, daß du das

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
  Size := Length(Textzeile);
  if (Size < Zeilenlaenge) then begin
    dazu := Zeilenlaenge - Size;
    x := 1;
    repeat
      Textzeile := Textzeile+leerzeichen;
      x := x+1;
    until
     x = dazu;
  end;


auch so lösen kannst:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
  for x := Length(Textzeile) to Zeilenlaenge do
  begin
    Textzeile := Textzeile + leerzeichen;
  end;

_________________
Gruß
Martin
FaTaLGuiLLoTiNe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 200
Erhaltene Danke: 5

Windows 7, Windows 8.1
Delphi XE
BeitragVerfasst: Mo 24.05.04 14:13 
Da du ja das gleiche Verfahren wie bei den Zeilen davor verwendest und in der Konsole auch das gewünschte Ergebnis bekommst ... kann es eventuell sein dass die aufgefüllten Zeichen für die Ansicht abgeschnitten werden? Welchen Texteditor benutzt du für das Betrachten von F2? Ansonsten kann ich auf Anhieb keinen Fehler finden ...

@MartinPb:
Hatte ich ihm ja auch schon gesagt. Aber da steckt das aktuelle Problem nicht, deswegen erstmal drüber hinwegsehen ... sonst könnte man btw auch gleich noch bemängeln dass er für das Auffüllen besser ne Funktion erstellen sollte (Wiederverwendbarkeit etc.) und der Quelltext im Ganzen noch etwas unübersichtlich ist :wink:

_________________
<< FaTaLGuiLLoTiNe >>
Rhinoceroses don't play games!
kostenix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: Mo 24.05.04 14:31 
okay, hier der komplette quellcode (vielleicht versteht ihr es ja dann) :)

ausblenden volle Höhe 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:
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:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
program Konverter;
{$APPTYPE CONSOLE}

var Zeilenlaenge  : Integer;
var AnzahlZeilen  : Integer;
var Zeilen        : Integer;
var i             : Integer;
var x             : Integer;
var Dateiname_alt : String;
var Dateiname_neu : String;
var Textzeile     : String;
var Size          : Integer;
var F1            : TextFile;
var F2            : TextFile;
var str           : String;
var ch            : Char;
var leerzeichen   : String;

Function ReadLine(FileName:string; LineNum: Integer): string;
 begin
  i := 0;
  AssignFile(F1, FileName);
    reset(F1);
    repeat
      read(F1, ch);
      if (ch <> #13and (ch <> #10)
        then str:= str + ch
      else
        if (ch = #13then
        begin
          inc(i);
          if (i <> LineNum + 1then str := '';
        end;
    until (i = LineNum + 1Or EOF(F1);
  CloseFile(F1);
  Result := Str;
end;

Function CountLines(FileName:string):integer;
begin
  i := 1;
  AssignFile(F1,FileName);
  reset(F1);
  while not EOF(F1) do begin
    Readln(F1);
    Inc(i);
  end;
  AnzahlZeilen := i-1;
  CloseFile(F1);
  Result := AnzahlZeilen;
end;

begin            //Anfang des Programmss

if (ParamStr(1) = '?'OR (ParamStr(1) = 'help'then
   Writeln('konvert.exe vorhandene_datei neue_datei')
else if (ParamCount < 2OR (ParamCount > 2then
   Writeln('Falsche Eingabe! konvert.exe vorhandene_datei neue_datei')
else
begin
  Dateiname_alt := ParamStr(1);
  Dateiname_neu := ParamStr(2);

  Zeilenlaenge := 225;
  leerzeichen := ' ';

  CountLines(Dateiname_alt);

  AssignFile(F2, Dateiname_neu);
  Rewrite(F2,Dateiname_neu);

  Writeln('Bitte warten, die Datei wird bearbeitet...');

//--------------- erste Zeile ---------------
    Textzeile := ReadLine(Dateiname_alt,0);
    Size := Length(Textzeile);
    if (Size < Zeilenlaenge) then begin
      for x := Length(Textzeile) to Zeilenlaenge do
      begin
        Textzeile := Textzeile + leerzeichen;
      end;
    end;
    Writeln(F2, Textzeile);

//--------------- Zeilen dazwischen ---------------
  Zeilen := AnzahlZeilen -1;
  i := 1;
  repeat
    Textzeile := ReadLine(Dateiname_alt,i);
    i := i-1;
    Size := Length(Textzeile);
    if POS('12345', Textzeile) = 119 then begin
      if (Size < Zeilenlaenge) then begin
        for x := Length(Textzeile) to Zeilenlaenge do
        begin
          Textzeile := Textzeile + leerzeichen;
        end;
      end;
      Writeln(F2, Textzeile);
    end;
    i := i+1
  until
    i = Zeilen;

//------------------ letzte Zeile ------------------
  Textzeile := ReadLine(Dateiname_alt,AnzahlZeilen);
  Size := Length(Textzeile);
  if (Size < Zeilenlaenge) then begin
    for x := Length(Textzeile) to Zeilenlaenge do
    begin
      Textzeile := Textzeile + leerzeichen;
    end;
  end;
  Writeln(F2, Textzeile);
//------------------ letzte Zeile ------------------
Writeln('Bearbeitete Zeilen: ',AnzahlZeilen);
Writeln('Fertig.');
end;

end.


ihr könnt es ja mal testen in dem ihr in eine textdatei 15 zeilen von text einfügt und dann mit dem programm konvertiert... die letzte zeile hat dann weniger zeichen in der zeile...

Moderiert von user profile iconMotzi: Code- durch Delphi-Tags ersetzt.
FaTaLGuiLLoTiNe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 200
Erhaltene Danke: 5

Windows 7, Windows 8.1
Delphi XE
BeitragVerfasst: Mo 24.05.04 14:58 
Also für eine Begründung sollen jetzt mal die etwas fitteren Delphianer sorgen, aber bei mir funktioniert das Ganze sobald ich hinter dem letzten WriteLn(F2, Textzeile) ein CloseFile(F2) einfüge (was man sowieso machen sollte wenn man eine Datei fertig bearbeitet hat). Wahrscheinlich hat es irgendwas hiermit zu tun:

Delphi Hilfe hat folgendes geschrieben:

Die F zugeordnete externe Datei wird vollständig aktualisiert und anschließend geschlossen, wodurch das Datei-Handle für die erneute Verwendung freigegeben wird.


Hoffe das hilft.

_________________
<< FaTaLGuiLLoTiNe >>
Rhinoceroses don't play games!
kostenix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: Mo 24.05.04 15:09 
ja super!
das hat geholfen!

danke schön! darauf wär ich nie gekommen!!!