![]() |
Delphi-Version: 5
file of char delphi7 geht nicht
Hallo -
ich versuche, eine eudora-mailbox ("inbox.toc") als file of char zu lesen. die chars 18 bis 31 beinhalten das datum. das funktioniert mit turbo pascal 7, ergibt aber in delphi nur laufzeitfehler. gibt es da einen unterschied in der file of char behandlung zwischen turbo pascal 7 und delphi7SE? der relevante programmteil sieht wie folgt aus: --------------------------------------------------------- var st,mess:string; toc:file of char; ch:char; fehler,tag,monat,jahr:integer; ........... mess:=''; assignfile(toc,'inbox.toc'); reset(t); for a:=1 to 218 do begin read(toc,ch); mess:=mess+ch; end; st:=copy(mess,19,31); st:=copy(st,1,pos(' ',st)-1); val(copy(st,1,2),tag,fehler); val(copy(st,4,2),monat,fehler); val(copy(st,7,4),jahr,fehler); .............. --------------------------------------------------------- Gibt's einen Tipp? Danke! |
AW: file of char delphi7 geht nicht
Zitat:
|
AW: file of char delphi7 geht nicht
Nimm einfach einen TFileStream, das ist mit Delphi sinnvoller und einfacher.
|
AW: file of char delphi7 geht nicht
Zitat:
|
AW: file of char delphi7 geht nicht
Ist ja vielleicht nur falsch abgetippt:
assignfile(toc,'inbox.toc'); reset(t); |
AW: file of char delphi7 geht nicht
danke für die hilfeversuche.
in der tat gibt es bei dem von mir vorgestellten programmtext einen tippfehler, der aber im tatsächlichen programm nicht vorhanden ist: statt "reset(t)" gehört "reset(toc)". die datei "inbox.toc" wird von keinem anderen programm verwendet. sie ist eine kopie der tatsächlichen eudora-inbox. "inbox.toc" lässt sich auch problemlos lesen und in einen anderen file kopieren - zeichen für zeichen. die zeichen lassen sich auch alle in einen string kopieren. Bloss: dort, wo dann in turbo pascal tatsächlich interpretierbare werte zu finden sind, stehen in delphi nur zeichen, die wie ein kleines quadrat aussehen. meine frage ist daher nach wie vor: gibt es beim lesen eines file of char einen relevanten unterschied zwischen dem, was ein DOS-basiertes programm (turbo pascal) und ein windows porgramm (delphi7) mit ein und dem gleichen zeichen anstellt?? |
AW: file of char delphi7 geht nicht
TP verwendet ASCII, Delphi 7 aber Ansi. Versuch doch einmal, Deinen String mit
![]() [edit] Ein Test mit Delphi 2007 ohne großartige Fehlerbehandlung (die Datei ist ASCII-kodiert):
Delphi-Quellcode:
Ich verwende OEMToCharBuff, weil bei OEMToChar eine Sicherheitswarnung im MSDN steht, also besser nicht benutzen. [/edit]
var
s: Ansistring; f: file of AnsiChar; c: AnsiChar; begin AssignFile(f, 'C:\temp\Gnödelgnüdel.txt'); {$I-} Reset(f); {$I+} if IOResult = 0 then begin while not EOF(f) do begin read(f, c); s := s + c; end; CloseFile(f); end; ShowMessage(s); //Gn”delgndel OEMToCharBuffA(PAnsiChar(s), PAnsiChar(s), Length(s)); ShowMessage(s); //Gnödelgnüdel end; |
AW: file of char delphi7 geht nicht
danke für die hilfe.
das programm, wie du es schreibst, funktioniert tadellos -> keine fehlermeldung. das ändert aber für delphi überhaupt nix: turbo pascal und notepad zeigen folgendes an: 1 Ą\ļ¾TģBA P P 5’’’’’’’’’’’’’’’’ Ō:ē > =^äM 06:19 31.05.2011 Delphi aber zeigt, egal ob ich die datei als stream lese, als file of char lese, in einen string umwandle und in eine datei schreibe oder anzeige, delphi also zeigt: " " (ohne leerzeichen). Ist das erklärbar? Oder der beweis dafür, dass es außerirdische gibt? Wo liegt MEIN fehler? |
AW: file of char delphi7 geht nicht
Bist Du sicher, dass es sich um ein File of Char handelt? Vermutlich ist da ein #0 o.Ä. dazwischen, was den String dann durcheinander bringt. An Deiner Stelle würde ich es auch einmal mit einem Stream versuchen, aus dem Du dann die für Dich interessanten Bytes herauskopierst.
[edit] Gerade ausprobiert:
Delphi-Quellcode:
[/edit]
var
fs: TFileStream; ss: TStringStream; s: string; begin fs := TFileStream.Create(Dateiname, fmOpenRead); try ss := TStringStream.Create(''); try fs.Position := 12; ss.CopyFrom(fs, fs.Size - fs.Position); s := ss.DataString; ShowMessage(s); finally ss.Free; end; finally fs.Free; end; end; |
AW: file of char delphi7 geht nicht
mit streams hab ich keine erfahrung (hab jetzt 25 jahre mit turbo pascal gelebt :-)). hab es grad mit handbuch versucht, bin aber gescheitert.
wie lese ich aus der datei "inbox.toc" die ersten 322 zeichen heraus (die datei ist deutlich länger als 322) und übertrage die zeichen 122 bis 153 auf einen string? oder ist eine solche frage unüblich in einem forum? krieg ich jetzt die antwort read the effing manual ;-)? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:01 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