AGB  ·  Datenschutz  ·  Impressum  







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

E/A beim Textspeichern

Ein Thema von moperswings · begonnen am 12. Apr 2007 · letzter Beitrag vom 14. Apr 2007
Antwort Antwort
Seite 1 von 2  1 2      
moperswings

Registriert seit: 27. Mai 2004
Ort: Bad Sooden-Allendorf
240 Beiträge
 
Delphi 6 Professional
 
#1

E/A beim Textspeichern

  Alt 12. Apr 2007, 16:53
Ein Hallo an ALLE,

Ich versuche einen Text zu speichern und bekomme immer - je nachdem welche Variante ich probiere, E/A 32, 104, 105. Ich seh aber den Fehler nicht! Könnt Ihr mal kurz einen Blick drauf werfen, vielleicht sieht ja jemand, woran es hakt!
Viele Grüsse, moperswings
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
        Memo1.SelStart := 3;
end;

procedure TForm1.Memo1OnKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var
        selstart: integer;
        TempStr2: PChar;
begin
        if key = VK_RETURN then
        begin
        tempStr2 := '</p>';

        SendMessage(Memo1.Handle, EM_Getsel, longint(@selstart), 0);
        SendMessage(Memo1.Handle, EM_Replacesel, 0, LongInt(TempStr2));
        SendMessage(Memo1.Handle, EM_Setsel, selstart + 4, Selstart + 4);
        key := 0;
        end;
end;

procedure TForm1.Memo1OnKeyUP(Sender: TObject; var Key: Word; Shift: TShiftState);
var
        selstart: integer;
        TempStr1: PChar;
begin
        if key = VK_RETURN then
        begin
        tempStr1 := '

';

        SendMessage(Memo1.Handle, EM_Getsel, longint(@selstart), 0);
        SendMessage(Memo1.Handle, EM_Replacesel, 0, LongInt(TempStr1));
        SendMessage(Memo1.Handle, EM_Setsel, selstart + 4, Selstart + 3);
        key := 0;
        end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
        f: textfile;
        dateiname: string;
        count: integer;
        p: string;
begin
        dateiname := 'daten.html';
        Assignfile(f, dateiname);
        {$i-}
        rewrite(f);
        {$i+}
        If IOResult <> 0 then begin
        ShowMessage('Fehler1');
        Exit;
        End;
        Writeln(f, Memo1.Text);
        closefile(f);

        count := 0;
        Assignfile(f, dateiname);
        FileMode := fmOpenRead;
        {$i-}
        reset(f);
        {$i+}
        If IOResult <> 0 then begin
        ShowMessage('Fehler2');
        Exit;
        End;

        While not EOF(f) do begin
        readln(f);
        inc(count);

        p := '</p>';

          if count = 0 then begin
          Writeln(f, Memo1.Text + p);
          closefile(f);
          end
          else
          if count >= 1 then begin
          Memo1.Lines.Delete(Memo1.Lines.Count - 1);
          Writeln(f, Memo1.Text + p);
          closefile(f);
          end;
        end;
end;
end.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: E/A beim Textspeichern

  Alt 12. Apr 2007, 17:00
Geb mal den vollen Pfad an.
Markus Kinzler
  Mit Zitat antworten Zitat
moperswings

Registriert seit: 27. Mai 2004
Ort: Bad Sooden-Allendorf
240 Beiträge
 
Delphi 6 Professional
 
#3

Re: E/A beim Textspeichern

  Alt 12. Apr 2007, 17:21
Am Pfad liegt´s nicht!
Der Debugger springt jetzt zum letzten Writeln mit E/A 105!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: E/A beim Textspeichern

  Alt 12. Apr 2007, 17:50
Zitat von Delphi-Hilfe:
Behandlung von E/A-Fehlern
Im Status {$I-} wird die Programmausführung fortgesetzt, und der Fehler wird von der Funktion IOResult gemeldet.

E/A-Fehler
Die folgende Tabelle enthält alle E/A-Fehler mit zugehöriger Nummer und einer kurzen Beschreibung.
Nummer
Name
Beschreibung

100
Lesefehler auf Laufwerk
Wird von Read bei dem Versuch gemeldet, den Lesevorgang für eine Textdatei nach dem Dateiende fortzusetzen.

101
Schreibfehler auf Laufwerk
Wird von CloseFile, Write, WriteIn oder Flush gemeldet, wenn auf dem Laufwerk kein freier Speicher mehr verfügbar ist.

102
Datei nicht zugewiesen
Wird von Reset, Rewrite, Append, Rename und Erase gemeldet, wenn der Dateivariablen kein Name zugewiesen wurde (durch einen Aufruf von Assign oder AssignFile).

103
Datei nicht geöffnet
Wird von CloseFile, Read Write, Seek, Eof, FilePos, FileSize, Flush, BlockRead oder BlockWrite gemeldet, wenn die Datei nicht geöffnet ist.

104
Datei nicht für Eingabe geöffnet
Wird von Read, Readln, Eof, Eoln, SeekEof oder SeekEoln gemeldet, wenn die Textdatei nicht für die Eingabe geöffnet ist.

105
Datei nicht für Ausgabe geöffnet
Wird von Write oder Writeln für eine Textdatei gemeldet, wenn keine Konsolenanwendung bereitgestellt wird.

106
Ungültiges Zahlenformat
Wir von Read oder Readln gemeldet, wenn ein aus einer Textdatei gelesener numerischer Wert nicht das richtige Zahlenformat hat.
Markus Kinzler
  Mit Zitat antworten Zitat
moperswings

Registriert seit: 27. Mai 2004
Ort: Bad Sooden-Allendorf
240 Beiträge
 
Delphi 6 Professional
 
#5

Re: E/A beim Textspeichern

  Alt 12. Apr 2007, 18:01
Ich habe mir die Fehlermeldungen schon angesehen.
Nur weiss ich nicht, wo mein Fehler im Code ist.
Entweder ist er generell falsch oder es ist nur eine Kleinigkeit, die ich übersehe!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: E/A beim Textspeichern

  Alt 12. Apr 2007, 18:03
Vielleicht das CloseFile innerhalb der Schleife?
Markus Kinzler
  Mit Zitat antworten Zitat
moperswings

Registriert seit: 27. Mai 2004
Ort: Bad Sooden-Allendorf
240 Beiträge
 
Delphi 6 Professional
 
#7

Re: E/A beim Textspeichern

  Alt 12. Apr 2007, 18:19
Closefile habe ich schon rausgenommen.
Es hat was mit Fallunterscheidung zu tun, wie das Dokument abgespeichert werden soll. Nehme ich das zweite writeln raus, läufts!
  Mit Zitat antworten Zitat
moperswings

Registriert seit: 27. Mai 2004
Ort: Bad Sooden-Allendorf
240 Beiträge
 
Delphi 6 Professional
 
#8

Re: E/A beim Textspeichern

  Alt 12. Apr 2007, 18:29
Am writeln liegt es nicht!

Es hat was damit zu tun, wie das Dokument zum zweiten mal geöffnet und zum Verarbeiten bereit gestellt wird. So würde ich das Laienhaft einschätzen
Delphi-Quellcode:
...
if count = 0 then Memo1.Lines.Add(</p>)
else
Memo1.Lines.Delete(Memo1.Lines.Count - 1);
end;
writeln(f, Memo1.Text);
Closefile(f);
Jetzt springt er auch zum writeln mit E/A 105
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#9

Re: E/A beim Textspeichern

  Alt 12. Apr 2007, 18:32
Mit den beiden folgenden Funktionen, wird das Laden und Speichern zum Kinderspiel:
Delphi-Quellcode:
function FileToString(const FileName: string): AnsiString;
var
  fs: TFileStream;
  Len: Integer;
begin
  fs := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
  try
    Len := fs.Size;
    SetLength(Result, Len);
    if Len > 0 then
      fs.ReadBuffer(Result[1], Len);
  finally
    fs.Free;
  end;
end;

procedure StringToFile(const FileName: string; const Contents: AnsiString);
var
  fs: TFileStream;
  Len: Integer;
begin
  fs := TFileStream.Create(FileName, fmCreate);
  try
    Len := Length(Contents);
    if Len > 0 then
      fs.WriteBuffer(Contents[1], Len);
  finally
    fs.Free;
  end;
end;
Man kann übrigens Daten in einem TMemo ganz einfach laden und speichern
Delphi-Quellcode:
Memo1.lines.LoadFromFile('datei.html');
Memo1.lines.Add('<body>');
Memo1.lines.Add('</body>');
Memo1.lines.SaveToFile('datei.html');
Andreas
  Mit Zitat antworten Zitat
moperswings

Registriert seit: 27. Mai 2004
Ort: Bad Sooden-Allendorf
240 Beiträge
 
Delphi 6 Professional
 
#10

Re: E/A beim Textspeichern

  Alt 12. Apr 2007, 18:42
Ok, ich beschreibe das Problem! Vielleicht gibt es ja eine ganz andere Lösung!
Ich hab nen Memo mit einem

.
Mit der Enter-Taste füge ich ein </p> ein, d.h. die Tags sind geschlossen und ein neues

wird bereit gestellt.

1. Fall: Der Nutzer schreibt eine Zeile und speichert ohne Enter-Taste, d.h. mir fehlt das </p>, also Memo1.Lines.Add(</p>);

2. Fall: Der Nutzer schreibt mehr und wenn ich speichere ist meine letzte Zeile ja

</p>.
Und diese überflüssige Zeile will ich weg haben, also Memo1.Lines.Delete(Memo1.Lines.count - 1).

Schreibt er aber nur eine Zeile mit Inhalt, würde mir der zweite Fall den Inhalt löschen.
Und aus der Nummer muss ich halt raus kommen!
Andere Vorschläge sind erwünscht!

Ziel: Die Tags sind geschlossen und keine überflüssigen Tags!
  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 03:51 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