Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Fehlerhafte Textdatei (https://www.delphipraxis.net/70266-fehlerhafte-textdatei.html)

marabu 28. Mai 2006 11:18

Re: Fehlerhafte Textdatei
 
Herzlich willkommen in der Delphi-PRAXiS, winkelmesser.

Deine Textdateien sind ganz sicher keine. Das Zeichen, ab dem die Textdatei nicht weiter gelesen wird, ist das Steuerzeichen EOF (#26). Es signalisiert der Leseroutine das Ende der Datei. Da die Leseroutinen unabhängig vom Kommunikationskanal sein sollen, wird so auch bei Dateien das vorzeitige Ende erreicht - obwohl das Dateisystem genau weiß, dass noch viele Zeichen danach folgen. Da hilft tatsächlich nur das Öffnen als untypsierte Datei oder FileStream. Aber selbst dann kommst du nicht so richtig weiter, wenn du nicht den internen Aufbau der Datei kennst.

Wenn du "Textdatei" vermutest, dann vielleicht deshalb, weil die Datei mit einem Textverarbeitungsprogramm erstellt wurde? Vielleicht haben diese Dateien alle die gleiche Dateinamenserweiterung? Oder weißt du sogar mit welchem Programm sie erzeugt wurden? Was willst du mit diesen Dateien machen?

Freundliche Grüße vom marabu

winkelmesser 28. Mai 2006 13:27

Re: Fehlerhafte Textdatei
 
Schade :cry: und dank an allen

Die Datei kommt von einer CNC Drehmaschine und ist eine Kompletsicherung der eigenen CNC Programme

Es gibt zwei Möglichkeiten die Programme ca. 250 von der CNC auf einen PC zu sichern

1. Mann notiert sich die Programmnamen und gibt diese am PC im Programm der den Datentransfer steuert ein und startet den Transfer und das ca. 250 mal.
2. Mann gibt irgendeinen Namen ein und macht eine Komplettsicherung von allen Programmen auf einmal.


Und jetzt kommt mein Programm ins Spiel mein Erstes!

In einer FileListBox wähle ich die Komplettsicherung aus
In der CheckListBox werden dann alle Programme Aufgelistet und man kann eine oder auch alle auf mal erstellen lassen

Klappt ja auch sehr gut wenn einige Dateien nicht dieses Zeichen „EOF (#26) „ in einigen Zeilen hätten.


winkelmesser

marabu 28. Mai 2006 14:09

Re: Fehlerhafte Textdatei
 
Liste der Anhänge anzeigen (Anzahl: 1)
Nicht aufgeben. Es ist etwas schwieriger, aber nicht unlösbar. Du musst einfach nur die Gesamtdatei zeichenweise in einen String einlesen. Bei jedem Vorkommen von EOF nimmst du den bis dahin erhaltenen String und weist ihn der Text-Eigenschaft einer StringList zu. Dadurch wird dir der String in Programmzeilen zerlegt. In der ersten Zeile steht der Programmname, gekennzeichnet durch ein Prozentzeichen am Zeilenbeginn. In der zweiten Zeile steht der Speicherpfad. Die restlichen Zeilen sind ProgrammCode. Du musst nur die zwei ersten Zeilen interpretieren und daraus einen Namen für das Dateisystem erzeugen. Mit diesem Namen kannst du dann den Code für das CNC-Programm mit der Methode StringList.SaveToFile() auf deiner Festplatte speichern.

Du schaffst das.

marabu


Edit: Im Anhang meine Lösung - falls du später vergleichen möchtest. Es ist ein Konsolenprogramm und meine Testdaten habe ich beigepackt. Der Aufruf geschieht mit zwei Parametern, aber das sagt das Programm, wenn man es ohne aufruft.

winkelmesser 29. Mai 2006 14:23

Re: Fehlerhafte Textdatei
 
Dank an marabu :thumb:

Hat lange gedauert :oops: aber es klappt echt Super :lol:

Und so sieht der Programmcode aus

Delphi-Quellcode:
procedure Tform1.TextRep(sender: TObject);
  var sl : TStringList;
begin
  sl := TStringList.Create;
  sl.LoadFromFile(verzP);
  [b]sl.Text := StringReplace(sl.Text, '', '', [rfReplaceAll]);[/b]
  sl.SaveToFile(verzP);
  form1.FileListBox1.Refresh;
end;
Edit:
ein Problem habe ich noch wenn die Datei Schreibgeschützt ist gibt er eine Fehlermeldung aus

Winkelmesser

[edit=SirThornberry]Delphi-Tags ergänzt - Mfg, SirThornberry[/edit]

Klaus01 29. Mai 2006 14:31

Re: Fehlerhafte Textdatei
 
Hallo Winkelmesser,

Du kannst ja vorher das Attribut entsprechend setzen -> http://www.delphipraxis.net/internal...ct.php?t=60283

oder auch damit -> function FileSetAttr(const FileName: string; Attr: Integer): Integer;

Grüße
Klaus


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:59 Uhr.
Seite 2 von 2     12   

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