![]() |
Re: Wie Erkenne ich den Unterschied zwischen Unix und Win32
da bin ich wieder :???:
@Reinhard hast Du eine andere Lösung parat ?? oder anders gefragt, wie würde Dein Programm aussehen ?? Gruss ascotlx |
Re: Wie Erkenne ich den Unterschied zwischen Unix und Win32
grmpf.... ok, reinhard:
Delphi-Quellcode:
So zufrieden?
function FileHasDOSLineBreak(fName: string): Boolean;
var c: char; i: Integer; begin with TFileStream.Create(fName, fmOpenRead) do try c := #0; while Position < Size do begin Read(c,SizeOf(c)); if c = #10 then begin Result := false; Break; end else if c = #13 then begin Result := true; Break; end end; finally Free; end; end; |
Re: Wie Erkenne ich den Unterschied zwischen Unix und Win32
Zitat:
"du must doch nur die Datei als file of char solange zeichenweise lesen, bis ein CR oder LF auftaucht: CR -> Windows, LF -> Unix. Es gibt zwar theoretische Ausnahmen wie z.B. herrenlose LFs in Windowstexten, aber für übliche Textdateien ist das 99.9 % sicher." Eine einfache Möglichkeit:
Delphi-Quellcode:
Gruss Reinhard
function IsUnixText (FName : ShortString) : boolean;
var tf : file of char; nch : Char; begin AssignFile (tf,FName); Reset (tf); repeat if not Eof (tf) then read (tf,nch); until (nch = #10) or (nch = #13) or Eof (tf); Close (tf); Result := nch = #10; end; { ungetestet } |
Re: Wie Erkenne ich den Unterschied zwischen Unix und Win32
Zitat:
Na bitte jeht doch hätte Regine Hildebrandt gesagt. Als Strict Pascal Purist könnte man TFileStream auch noch weglassen - ich habe in der Hilfe nichts darüber gefunden, warum das besser sein soll als ein normales file of .... IO Gepuffert haben schon meine Z80-Compiler vor vielen Jahrzehnten. Gruss Reinhard |
Re: Wie Erkenne ich den Unterschied zwischen Unix und Win32
Liste der Anhänge anzeigen (Anzahl: 1)
Hier och nochmal ein paar "uralte" Codes ... die sind zwar nicht superschnell, aber funktionieren 100%ig selbst wenn mal nicht ganz konformen CR-LF-Kombinationen.
Zum Testen:
Delphi-Quellcode:
Zum Umwandeln:
Var D: File of Byte;
B, Ba: Byte; T: Boolean; CR := 13; //Carriage Return LF := 10; //Line Feed T := False; AssignFile(D, Datei); Try FileMode := fmOpenRead; Reset(D); Ba := 255; While not EoF(D) do Begin Read(D, B); If ((Ba = CR) and (B <> LF)) or ((Ba <> CR) and (B = LF)) Then Begin T := False; Break; End; Ba := B; End; If Ba = CR Then T := False; Except End; CloseFile(D); If not T Then {mindestens ein Nicht-Windows-Zeilenumbruch ist enthalten}
Delphi-Quellcode:
Aber wie schon von einigen gesagt wurde ... am Einfachsten und auch recht zuverläßig sind die TStringList-Varianten.
AssignFile(Datei1, TempDatei); Reset(Datei1);
AssignFile(Datei2, Datei); Rewrite(Datei2); Ba := 255; While not EoF(Datei1) do Begin Read(Datei1, B); If (Ba = CR) and (B <> LF) Then Begin Write(Datei2, LF); Ba := LF; End; If (Ba <> CR) and (B = LF) Then Begin Write(Datei2, CR); {Ba := CR;} End; Write(Datei2, B); Ba := B; End; If Ba = CR Then Write(Datei2, LF); CloseFile(Datei2); CloseFile(Datei1); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:38 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