AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Problem mit writeln (Text erstellen)
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit writeln (Text erstellen)

Ein Thema von Boyington · begonnen am 22. Jun 2012 · letzter Beitrag vom 25. Jun 2012
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Boyington
Boyington

Registriert seit: 12. Apr 2012
43 Beiträge
 
#1

Problem mit writeln (Text erstellen)

  Alt 22. Jun 2012, 13:15
Hallo Zusammen,
ich möchte in Delphi eine Text-Datei erstellen und die Abstände und zugehörige x, y Koordinaten sind drin, Format wie folgendes (nur Beispiel-->x, y: integer; MiniAbstand:real; x:0-9, y:0-19, also 10x20), ABER erste Zeile ("x y Abstand") wird in dieser Textdatei NICHT angezeigt

x y Abstand
0 19 1.435
1 19 2.312
2 19 1.112
3 19 5.123
.. .. ...
8 19 1.231
9 19 3.123
0 18 2.123
1 18 6.123
2 18 2.345
3 18 1.234
.. .. ...
8 18 3.112
9 18 4.567
0 17 2.567
1 17 2.111
2 17 6.123
.. .. ...
9 17 7.123
0 16 2.678
1 16 3.345
2 16 3.890
.. .. ...
.. .. ...
0 5 7.001
1 5 2.567
2 5 3.345
.. .. ...
9 5 1.113
0 4 2.123
1 4 3.321
.. .. ...
0 0 2.234
1 0 1.567
2 0 5.132
.. .. ...
7 0 7.123
8 0 1.127
9 0 2.980

Hier sind die Code
Delphi-Quellcode:
Type
 TAbstand = record
 Nr: integer;
 Abs: real;
 end;
.
.
.
var
 Abstaende: array of array of TAbstand;
.
.
.
procedure TForm1.Button4Click(Sender: TObject);
var
 MiniAbstand:real;
 Nummer:integer;
 i, j:integer;
 F:Textfile;
begin
  AssignFile(F, 'List_Abstand.txt');
 
 for i:=0 to 19 do
  begin
    for j:=0 to 9 do
    begin
     Nummer:=Abstand(MiniAbstand,Dreiecke);
     Abstaende[i,j].Nr:=Nummer;
     
      if Nummer > 0 then
        Abstaende[i,j].Abs:=MiniAbstand
      else
        Abstaende[i,j].Abs:=1000;

      Writeln(F,j,' ',19-i,' ',Abstaende[i,j].Abs);

    end;
  end;
end;
:
Funktion 'Abstand' ist von mir selbst geschrieben, hier j entspricht x in Textdatei, und i entspricht y.

Compile ist ganz in Ordnung, ohne Fehlermeldung, ab wenn ich das Programm durchführte, bekommen ich "I/O Error 103", wo kann der Fehler liegen?

Vielen Dank!

Gruss
Lee
Do the best job, leave the rest in the hands of God!

Geändert von Boyington (22. Jun 2012 um 13:20 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.349 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Problem mit writeln (Text erstellen)

  Alt 22. Jun 2012, 13:26
Du öffnest die Datei nirgends, du verbindest deine Variable F nur mit dem Dateinamen. Und wo du die erste Zeile schreiben willst, sehe ich auch nirgends.

Siehe Doku:
http://docwiki.embarcadero.com/Libra...tem.AssignFile
Oder andere Seiten:
http://www.delphibasics.co.uk/RTL.asp?Name=AssignFile
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Problem mit writeln (Text erstellen)

  Alt 22. Jun 2012, 13:34
Mit einer Stringliste ginge das einfacher.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Problem mit writeln (Text erstellen)

  Alt 22. Jun 2012, 14:18
Wenn ich Jaenicke noch etwas ergänzen dürfte,
das CloseFile(f) fehlt ebenfalls.
Ist (war) beliebte Fehlerursache für zu kurze Textdateien.

@DeddyH
Er will eben alle Funktionalitäten erlernen.
Und für Log-Files gibt es meiner Meinung nach nichts besseres als
Assignfile,append,writeln,closefile
(ja das ist wohl kein Logfile, aber es hat zusehr gejuckt)

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.147 Beiträge
 
Delphi 12 Athens
 
#5

AW: Problem mit writeln (Text erstellen)

  Alt 22. Jun 2012, 14:55
Und für Log-Files gibt es meiner Meinung nach nichts besseres als
Assignfile,append,writeln,closefile
Dem würde ich nicht zustimmen.

"nichts Einfacheres" würde stimmen, abgesehn von speziell dafür erstellen Klassen/Bibliotheken, also rein auf die "einfachen"/direkten Dateizugriffsfunktionen bezogen.

"Besseres" gibt es alle Male, vom Caching her sind Streams besser und von der Funktionalität die spezialisierten Klassen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Problem mit writeln (Text erstellen)

  Alt 22. Jun 2012, 15:20
Wird zwar etwas OT aber warum
Zitat:
vom Caching her sind Streams besser
.
a) ich müßte bei Strings noch das CRLF hinterher schieben?
b) sogar ohne settextbuf geht es (unter windows)ganz gut.

Liege ich da so falsch?

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Problem mit writeln (Text erstellen)

  Alt 22. Jun 2012, 15:31
.. ich möchte dann mal die Folgende Klassen TStreamWriter
und TStreamReader in den Raum werfen.

Delphi-Referenz durchsuchenTStreamWriter.WriteLine
Delphi-Referenz durchsuchenTStreamReader.ReadLine

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#8

AW: Problem mit writeln (Text erstellen)

  Alt 22. Jun 2012, 16:32
Zu kurz geworfen,in D7 unbekannt,
wie wäre es mit TStringStream ?
aber da fehlt mir die Angabe der Datei aus der ich lesen will.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.147 Beiträge
 
Delphi 12 Athens
 
#9

AW: Problem mit writeln (Text erstellen)

  Alt 22. Jun 2012, 16:45
TStringStream + TFileStream




Text-Dateien haben auch ohne SetTextBuf schon einen komischen 128 Byte-Puffer.

Das paßt nichtmal im Geringsten zur ClusterSize der Partitionen oder zur SectorSize der Datenträger.

Beim Lesen ist ein Puffer OK, aber wozu beim Schreiben?
Die Daten gehen sowieso nochmal durch die WFC (Windows File Cache ... das Teil, welches den RAM voll macht) und dann nochmal durch verschiedenste Caches.

Wenn das Programm abstürtzt, sind diese Daten weg, was geade bei LogDateien etwas blöd ist, vorallem wenn man das Warum wissen will.

Delphi-Quellcode:
var
  F: TextFile;
  B: Byte; // für LogDateien so klein wie möglich (0 ist leider nicht möglich) und ansonsten wäre es ein bissl größer nicht schlecht.
begin
  AssignFile(F, 'Text.dat', CP_UTF8); // Ja, wir können jetzt sogar unicode, auch wenn die BOM nicht automatisch rein kommt.
  System.SetTextBuf(F, B);
  Rewrite(F);
  WriteLn(F, '123456');
  CloseFile(F);
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#10

AW: Problem mit writeln (Text erstellen)

  Alt 22. Jun 2012, 17:01
Wenn das Programm abstürtzt, sind diese Daten weg, was geade bei LogDateien etwas blöd ist, vorallem wenn man das Warum wissen will.
Genau das ist ja der Grund für mich da mal auf writeln zurück zu greifen.
Nach meinem Kenntnisstand wird der Buffer bei einem Closefile weggeschrieben, also seh ich da keine Gefahr des Datenverlustes (natürlich für jede Zeile das append,writeln,closefile)
Was den Buffer angeht und den Tstream vielleicht komm ich am WE mal dazu etwas zu Teste ob es da signifikante Geschwindigkeitsunterschiede gibt.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 15: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