Autor Beitrag
anselm
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mo 03.02.03 20:58 
Hallo ich habe folgendes problem und zwar:
text datei wird geöffnet mit memo1.lines.loadfromfile()
und mit einer kovertier routine in ein anderes memo feld kopiert!
mit das zweite memofeld mit memo2.lines.savetofile() gespeichert
das ging auch alles super nur leider meint der rechner des kunden bei dieser version das der arbeitsspeicher nicht ausreicht!
na toll also alles anderst!

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
AssignFile(in_file,edit1.Text);
AssignFile(out_file, edit2.Text);
reset(in_file);
while(eof(in_file)=false) do
begin
  readln(in_file, s);
  lcounter := lcounter + 1;
end;
//closefile(in_file);
reset(in_file);
rewrite(out_file);
status := 0;
linesm := lcounter;
ProgressBar1.Max := lcounter;
lcounter:=0;
while(eof(in_file)=false) do // lies in_file zeile für zeile
begin 
// an dieser stelle ist in echt die konvertierung!
readln(in_file, buff);
writeln(out_file, buff);
end;
closefile(in_file);
closefile(out_file);


nur meint er immer bei der zeile
closefile(out_file);
"Access violation"
bzw.
"Invalid pointer operation"

hat jeman eine tip woran es liegen kann?
grayfox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 800

win98, winXP
D4 Standard; D6 Personal
BeitragVerfasst: Mo 03.02.03 22:25 
hallo anselm!
dein problem ist echt schwierig :)
mal ganz langsam, damit ich mitkomme...
wie gross sind die textfiles, die du da von memo nach memo schaufelst?
bei win 9x gibts bei memofeldern eine grössenbegrenzung von 64KB, hingegen bei xp oder 2k dürfen es 2 GB sind.

leichter zu lesen ist dein code, wenn du
ausblenden Quelltext
1:
 while not eof(infile)					

hinschreibst, das klingt für mich leichter verständlich ;)

im ersten teil deines codes zählst du, wieviel zeilen du zu erwarten hast,
daher nehme ich an, dein in_file ist als TextFile definiert.

wenn du aber im anschluss das ganze file in die variable buff lesen willst,
solltest in_file und out_file als File und das einlesen und schreiben
mit BlockRead & BlockWrite durchführen, sonst liest nur eine zeile...

warum bleibst eigentlich nicht beim zeilenweisen lesen und als was ist buff deklariert?

mfg, stefan
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 03.02.03 23:31 
Desweiteren würd eich den Code mal etwas sortieren, also das zusammenfassen, was zusammen gehört:
ausblenden 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:
  AssignFile(in_file,edit1.Text);
  reset(in_file);
  while not eof(in_file) do
  begin
    readln(in_file, s);
    lcounter := lcounter + 1;
  end;

  reset(in_file);

  status := 0;
  linesm := lcounter;
  ProgressBar1.Max := lcounter;
  lcounter:=0;

  AssignFile(out_file, edit2.Text);
  rewrite(out_file);
  while not eof(in_file) do
  begin
    readln(in_file, buff);
    writeln(out_file, buff);
  end;

  closefile(in_file);
  closefile(out_file);

Wie deine Variablen-Deklaration aussieht wäre auch mal gut zu wissen.
anselm Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Di 04.02.03 01:52 
also die in_file und out_file sind
ausblenden Quelltext
1:
var in_file, out_file : textfile;					


und

Zitat:
buff : string;


64k das problem war es erst deshalb lese ich ja jetzt jede zeile einzeln ein!

danke schonmal für die antwort!
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 04.02.03 19:27 
@anselm: Der von dir gepostete Code ist selbst in der unübersichtlichen Variante (die Luckie mehr oder weniger bemängelt hat) anstands- und fehlerlos ausführbar! Ich hab´s eben mal getestet, weil ich beim besten Willen keinen Fehler im Code entdecken konnte.
Handelt es sich dabei wirklich um das, was du auch in deinem Programm benutzt? Oder hast du in der Zeile
ausblenden Quelltext
1:
// an dieser stelle ist in echt die konvertierung!					

den evtl. wichtigen Teil ausgelassen? Wie dem auch sei, in dem Codestück (s. oben) existiert kein Fehler. Jedenfalls keiner, der die von dir genannte Fehlermeldung auslöst, geschweige denn erklärt. (btw: Ich hab´s mit D5 mal fix getestet, und Copy&Paste ist ja auch nicht allzu schwierig :))

@grayfox:
Zitat:
wenn du aber im anschluss das ganze file in die variable buff lesen willst,
solltest in_file und out_file als File und das einlesen und schreiben
mit BlockRead & BlockWrite durchführen, sonst liest nur eine zeile...

warum bleibst eigentlich nicht beim zeilenweisen lesen ...

:? Na, da haben wir uns wohl ein bisschen verrannt. :wink:
anselm Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Di 04.02.03 19:28 
habe ich auch gemerkt ich poste gleichmal alles!
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 04.02.03 20:24 
Clever. :twisted: Du willst was zu einem Fehler wissen und lässt den Codeteil, der ihn verursacht, aus.
grayfox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 800

win98, winXP
D4 Standard; D6 Personal
BeitragVerfasst: Di 04.02.03 21:54 
@mathias: wohin hab ich mich denn da verrannt? :) 'readln' liest immer nur eine zeile aus deiner textdatei, während man mit 'blockread' einen puffer in der definierten grösse auf einmal einlesen kann. hat sich da seit turbo-pascal was verändert?

mfg, stefan

ps: ich kenn nur den spruch: thou shalt not kiss your neighbour's wife *gg*
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 05.02.03 09:42 
*hi hi* Ich bezog mich auf den Satz
Zitat:
warum bleibst eigentlich nicht beim zeilenweisen lesen ...

und rufe dir lauthals entgegen:

TUT ER DOCH! :twisted:


(btw: Hey, du hast ja recht. Da ist ja ´n L zuviel in der Sig. Das muss ein T sein. Mist! Wird sofort geändert. Aber die binäre Nummer drunter ist doch besser. :wink: Beides eine Referenz an meine Lieblings-Satiresendung: FUTURAMA!)
grayfox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 800

win98, winXP
D4 Standard; D6 Personal
BeitragVerfasst: Mi 05.02.03 18:55 
@mathias: ich sags nicht gern, aber ich hab das 'while not eof' vollkommen übersehen *sfg*
ja, er liest das file zeilenweise aus. jetzt hab ichs auch verstanden.

btw: was ist FUTURAMA?

mfg, stefan
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 05.02.03 19:33 
Sci-Fi-Zeichentrickserie von Matt Groening, Simsons-Erfinder.
Kam bisher Samstag 18 Uhr, Pro7.
Die ersten beiden Staffeln gibt´s auf DVD.

Im englischen Original besser und gehässiger als die deutsche Fassung. Vor allem die Wortspiele und -jokes kommen besser rüber. Aber das wird jetzt zu off-topic.