Delphi-PRAXiS
Seite 4 von 5   « Erste     234 5      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Fehler beim überschreiben von Datei (https://www.delphipraxis.net/159755-fehler-beim-ueberschreiben-von-datei.html)

EWeiss 12. Apr 2011 13:32

AW: Fehler beim überschreiben von Datei
 
Zitat:

Zitat von himitsu (Beitrag 1094635)
Meinst du nicht $I- ?

Ja korrekt! ;)

Zitat:

Wobei Seek und ReadLn garnicht zusammen funktionieren sollte.
Bei mir schon wobei ich nicht Seek sondern FSeekTo verwende was ein sehr großer Unterschied ist.
Ich fülle damit meine Variablen um nachher den start und endpunkt eines Textes über eine Abfrage besser
identifizieren zu können.

Delphi-Quellcode:
procedure FSeekTo(nReading: Integer; sBuffer: string);
begin

  New(FPBuffer);

  if nReading = 0 then
  Begin
    New(FToPBuffer);
    LineStart := FToPBuffer;
  end;

  FPBuffer^.Nr   := nReading;
  FPBuffer^.Str  := sBuffer;
  LineStart^.Max := nReading;
  FToPBuffer^.Ptr := FPBuffer;
  FToPBuffer     := FPBuffer;

end;
Delphi-Quellcode:
  FPBuffer := LineStart;
  while (FPBuffer.Nr <= LineStart.Max) do
  begin
usw..

Aber wie schon gesagt.
Jeder so wie er am besten zurecht kommt.

EDIT:
So schlecht wie er hier hingestellt wird ist mein Code gar nicht ;)
Einfacher wäre natürlich Copy/Paste hier aus dem Forum.


gruss

shmia 12. Apr 2011 14:48

AW: Fehler beim überschreiben von Datei
 
Die Procedure FSeekTo müsste eigentlich AppendToLinkedList heissen; denn das ist genau das was passiert: der übergebene Puffer (in Form eines String) wird an die verkettete Liste angehängt. Mit "Seek" oder "FileSeek" hat die Prozedur nix zu tun.
Namensgebung ist beim Programieren einfach sehr wichtig; das darf man nicht auf die leichte Schulter nehmen.

EWeiss 12. Apr 2011 15:26

AW: Fehler beim überschreiben von Datei
 
Zitat:

Zitat von shmia (Beitrag 1094650)
Die Procedure FSeekTo müsste eigentlich AppendToLinkedList heissen; denn das ist genau das was passiert: der übergebene Puffer (in Form eines String) wird an die verkettete Liste angehängt. Mit "Seek" oder "FileSeek" hat die Prozedur nix zu tun.
Namensgebung ist beim Programieren einfach sehr wichtig; das darf man nicht auf die leichte Schulter nehmen.

Ich suche oder?
Daher auch die Namensgebung

PS:
Zitat:

Mit "Seek" oder "FileSeek"
Habe ich nie gesagt das es damit etwas zu tun hat..

gruss

Aphton 12. Apr 2011 15:40

AW: Fehler beim überschreiben von Datei
 
Um dich etwas zu stützen - was zählt, ist, dass letzendlich alles klappt.

Genau das ist aber das Ziel und ans Ziel zu gelangen sollte nicht unnötig erschwert werden indem man sich selbst Stolpersteine in den Weg legt (indem man z.B. hardkodierte Zahlen anstatt Konstanten verwendet)
Ausschlaggebend wird das ganze dann beim Debuggen oder wiederverwenden der Codesnippets!

Letzendlich willst du, dass dein Code funktioniert. Das tut es im Moment aber was ist, wenn du nach einer 3-4 monatigen Pause wieder mal dran arbeiten und ein paar Bugs beheben willst. Dir wird dann $02 nichts sagen! Konstanten hingegen dürften verständlicher und dir somit beim Erreichen deines "Zieles" (funktionierender & wiederverwendbarer Code) behilflicher sein!

Es gibt unendlich viele Gründe, warum man Dinge richtig anpacken sollte - damit will ich nicht implizieren, dass deine Methode in irgendiner Form falsch wäre/ist. Aber es gibt bessere Wege! Und warum nicht diese begehen?

:stupid:

Edit: Dies bezieht sich auf diesen Text
Zitat:

Wer schreibt mir vor in welchen Stil ich schreiben muss?
Für mich zählt das ergebnis nicht ob ich eine für mich nichtssagende Konstante
verwende oder hartcode.
Solange wie der Compiler damit zurecht kommt.
Sieht man das nachher in der Compilierten EXE?

Kennst den Unterschied zwischen
Dim X% und Dim X As Integer ?

Siehste ... welche Schreibweise ist dir genehm wenn beides das gleiche Ergebnis liefert.

shmia 12. Apr 2011 15:41

AW: Fehler beim überschreiben von Datei
 
Zitat:

Zitat von EWeiss (Beitrag 1094666)
Ich suche oder? Daher auch die Namensgebung

Sag mal, merkst du das nicht, dass die Procedure überhaupt nichts mit "suchen", "streben nach", "forschen" oder "erlangen wollen" zu tun hat???

"AnhaengenAnVerketteListe", "Speichern" oder "Merken" wäre hier korrekte Begriffe!!
Demzufolge ist dein Prozedurname einfach sehr sehr irreführend.
"AppendToLinkedList" wäre eine wirklich passende Beschreibung für die Prozedur.

Luckie 12. Apr 2011 16:26

AW: Fehler beim überschreiben von Datei
 
Zitat:

Zitat von himitsu (Beitrag 1094628)
@Luckie:
Diese alten Pascal-Routinen nutzen IOResult und nicht GetLastError :zwinker:

Und in IOResult steht der letzte Fehler drin? Zumindest, wenn die Datei nicht existiert, kommt der richtige Fehlertext.

@EWeiss: Die Kritik an deinen Code war nicht persönlich gemeint nur eine Konstruktive Kritik. Nehmen wir das Beispiel mit den Konstanten. Wenn du diese hart codest und sie ändern sich mal, bin ich mir zu hundert Prozent sicher, dass du nicht alle Stellen findest, wo du sie benutzt hast. Benutzt du aber eine benannte Konstante, musst du sie nur an einer Stelle im Code ändern.

EWeiss 12. Apr 2011 16:27

AW: Fehler beim überschreiben von Datei
 
Zitat:

Zitat von shmia (Beitrag 1094668)
Zitat:

Zitat von EWeiss (Beitrag 1094666)
Ich suche oder? Daher auch die Namensgebung

Sag mal, merkst du das nicht, dass die Procedure überhaupt nichts mit "suchen", "streben nach", "forschen" oder "erlangen wollen" zu tun hat???

"AnhaengenAnVerketteListe", "Speichern" oder "Merken" wäre hier korrekte Begriffe!!
Demzufolge ist dein Prozedurname einfach sehr sehr irreführend.
"AppendToLinkedList" wäre eine wirklich passende Beschreibung für die Prozedur.

Hast mich überzeugt ;)
Werd es dann mal berichtigen.

Zitat:

@EWeiss: Die Kritik an deinen Code war nicht persönlich gemeint nur eine Konstruktive Kritik. Nehmen wir das Beispiel mit den Konstanten. Wenn du diese hart codest und sie ändern sich mal, bin ich mir zu hundert Prozent sicher, dass du nicht alle Stellen findest, wo du sie benutzt hast. Benutzt du aber eine benannte Konstante, musst du sie nur an einer Stelle im Code ändern.
Habe ich auch nicht so verstanden..
Grundsätzlich gebe ich euch ja recht.

IOResult der erste Eintrag bei Google ;)
Delphi-Quellcode:
var F: file of Byte;
begin
 Assign(F, ParamStr(1));
 {$I-}
 Reset(F);
 {$I+}
 if IOResult = 0 then
   Writeln('Dateigröße in Byte ', FileSize(F))
 else
   Writeln('Datei nicht gefunden');
end.

gruss

himitsu 12. Apr 2011 16:38

AW: Fehler beim überschreiben von Datei
 
Zitat:

Zitat von Luckie (Beitrag 1094680)
Und in IOResult steht der letzte Fehler drin?

Ja.

Sobald ein Fehler auftrat, werden alle nachfolgenden Pascal-Datei-Routinen übergangen und nicht mehr ausgeführt.
Und ist {$i} aktiviert (+), dann lößt der erste Fehler eine Exception aus und die Codebearbeitung wird unterbrochen.

Achtung: Das Auslesen von IOResult setzt den internen Fehlercode wieder auf 0. (danach werden also die Dateiroutinen wieder ausgeführt)


[add]
Jetzt weiß ich auch endlich wieder, wieso ich mal auf die saublöde Idee kam, GetLastError würde seinen Fehlercode zurücksetzen. :wall:

Luckie 12. Apr 2011 16:42

AW: Fehler beim überschreiben von Datei
 
Zitat:

Zitat von EWeiss (Beitrag 1094682)
IOResult der erste Eintrag bei Google ;)
Delphi-Quellcode:
var F: file of Byte;
begin
 Assign(F, ParamStr(1));
 {$I-}
 Reset(F);
 {$I+}
 if IOResult = 0 then
   Writeln('Dateigröße in Byte ', FileSize(F))
 else
   Writeln('Datei nicht gefunden');
end.

woher weißt du, dass die Datei nicht existiert und nur nicht geöffnet werden kann, weil sie exklusiv von einem anderen Prozess geöffnet wurde?

EWeiss 12. Apr 2011 16:44

AW: Fehler beim überschreiben von Datei
 
Zitat:

Zitat von Luckie (Beitrag 1094688)
Zitat:

Zitat von EWeiss (Beitrag 1094682)
IOResult der erste Eintrag bei Google ;)
Delphi-Quellcode:
var F: file of Byte;
begin
 Assign(F, ParamStr(1));
 {$I-}
 Reset(F);
 {$I+}
 if IOResult = 0 then
   Writeln('Dateigröße in Byte ', FileSize(F))
 else
   Writeln('Datei nicht gefunden');
end.

woher weißt du, dass die Datei nicht existiert und nur nicht geöffnet werden kann, weil sie exklusiv von einem anderen Prozess geöffnet wurde?

Es ist doch nur ein Beispiel von Google ;)
Nicht meins um die alten Schalter von Turbo Pascal zu dokumentieren.
Wie sie damals angewendet wurde.

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:27 Uhr.
Seite 4 von 5   « Erste     234 5      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz