![]() |
Fehlerhafte Textdatei
Bevor ich mein Problem schildere möchte ich allen Usern ein großes Lob aussprechen :thumb:
Zu meinem Problem Ich bekomme Textdateien die Unterschiedlich groß sind und einige Zeilen haben am Zeilenanfang dieses Zeichen ab dieser Position wird die Datei nicht weiter ausgelesen. Auszug aus der Datei %_N_16099_11_D155_E1_MPF ;$PATH=/_N_WKS_DIR/_N_EASYSTEP_WPD G0 G90 Z1540 M5 M35 M30 %_N_16099_11_D181_E1_MPF ;$PATH=/_N_WKS_DIR/_N_EASYSTEP_WPD M4 M24 E_T(18) Die Function sieht so aus
Delphi-Quellcode:
wie kann ich es anstellen das diese Zeichen gelöscht werden und bis zum Dateiende gelesen wird.
function TextRep(text : String): integer;
var TextLesen : array[1..10000] of string; var i, z : integer; begin z:=0; AssignFile(f,form1.FileListBox1.FileName); reset(f); while not eof(f) do begin Readln(f,TextLesen[z]); inc (z); end; closefile(f); AssignFile(f,'C:\test.MPF'); ReWrite(f); for i := 0 to z do begin writeLn(f,TextLesen[i]); end; closefile(f); end; Winkelmesser [edit=SirThornberry]Delphi-Tags ergänzt - Mfg, SirThornberry[/edit] |
Re: Fehlerhafte Textdatei
Versuch mal die datei als binäre datei, statt Textdatei einzulesen.
|
Re: Fehlerhafte Textdatei
Hallo mkinzler
Habe es bis jetzt nur als Textdatei versucht muss mal sehen ob ich es binäre hinbekomme Dank in Voraus |
Re: Fehlerhafte Textdatei
Readln und Array of String verträgt sich nicht auf die Weise wie du es verwendest. Ich denke du meinst eher
Delphi-Quellcode:
var TextLesen : array[1..10000] of char;
|
Re: Fehlerhafte Textdatei
Hallo SirThornberry
var TextLesen : array[1..10000] of char; bringt eine Fehlermeldung muss ich noch was ändern Winkelmesser |
Re: Fehlerhafte Textdatei
Zitat:
es handelt sich nicht um ein dynamisches array of string sondern um ein statisches array[1..10000} of string und bei mir verträgt es sich ausgezeichnet mit ReadLn. @winkelmesser dein array ist definiert als TextLesen:array[1..10000] of string, also solltest du nicht versuchen in TextLesen[0] zu schreiben
Delphi-Quellcode:
begin
z:=0; AssignFile(f,form1.FileListBox1.FileName); reset(f); while not eof(f) do begin inc (z); Readln(f,TextLesen[z]); //inc (z); gehört vor das ReadLn end; closefile(f); AssignFile(f,'C:\test.MPF'); ReWrite(f); // for i := 0 to z do sollte bei 1 beginnen for i := 1 to z do begin writeLn(f,TextLesen[i]); end; closefile(f); end |
Re: Fehlerhafte Textdatei
Hallo Amateurprofi
array[1..10000] of tring; verträgt sich auch bei mir aber das ist nicht mein Problem ich kann nicht die Zeile mit diesen Zeichen Lesen ich nehme an es bedeutet Dateiende Was ich brauche ist Die Ganze Datei Zeilenweise einzulesen und diese zeichen zu Löschen Winkelmesser |
Re: Fehlerhafte Textdatei
Bin ich etwas vewundert das es so geht, da die Länge des String nirgends gesetzt wird...
Hast du es schon mit TFileStream probiert? |
Re: Fehlerhafte Textdatei
Hast du es schon mit TFileStream probiert?
Nein bin noch am suchen komme nicht ganz klar damit :wall: |
DP-Maintenance
Dieses Thema wurde von "JasonDX" von "Freeware" nach "Sonstige Fragen zu Delphi" verschoben.
Gehoert nicht nach Freeware ;) |
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 |
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 |
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. |
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:
Edit:
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; 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] |
Re: Fehlerhafte Textdatei
Hallo Winkelmesser,
Du kannst ja vorher das Attribut entsprechend setzen -> ![]() oder auch damit -> function FileSetAttr(const FileName: string; Attr: Integer): Integer; Grüße Klaus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:55 Uhr. |
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