Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Blockread konvertirungsprobleme von D5 nach D2010 (https://www.delphipraxis.net/158538-blockread-konvertirungsprobleme-von-d5-nach-d2010.html)

h_johr 21. Feb 2011 16:42

Blockread konvertirungsprobleme von D5 nach D2010
 
Hallo wer kann mir helfen.

Ich habe ein Problem mit chinesischen Schriftzeichen bei der Umstellung auf D2010 !

Habe bisher mit D5 TXT Dateien problemlos eingelesen.
(ich lese immer 1 Zeichen ein um Feldtrenner ';' und Satzende 0A0D zu erkennen.)

var
MFELD1 : array [0..0] of char;
mtest0,mtest1,mtest2:char;
MAFELD1:String;
MDatei: File;
Mk: File;
nread:integer;
.
.
procedure Lesen;
begin
MAFELD1:= '';
while not eof(mk) do begin
blockread(MK,MFeld1,sizeof(MFeld1),nread);
if (MFeld1=MTest1) then begin
blockread(MK,MFeld1,sizeof(MFeld1),nread); // einlesen #10
break;
end;
if (MFeld1<>MTest0) then begin
mafeld1:=mafeld1+MFeld1;
end;
if (MFeld1=MTest0) then break;
end;
end;

procedure TForm444.Button1Click(Sender: TObject);
begin
MTEST0:= ';';
MTEST1:= CHR(13);
MTEST2:= CHR(10);
fname:='J:\Ponn\Auft\Data\DEG\datanorm.001';
assignfile(MK,fname);
reset(MK,1);
lesen();
if copy(MAFELD1,1,1)='V' then begin
.
.


Mit der Umstellung auf D2010 ist der Vergleich von char und Array [0..0] of char nicht mehr möglich. Also habe ich die Variable MTest0,MTest1,MTest2 welche ich mit dem Array vergleiche ebenfalls als
Array[0..0] definiert.

Jedoch schon bei der Zuweisung MTEST0:=';' hat die Variable den Wert '䜰' ... auch alle Zeichen die mit Blockread eingelesen werden sind Chinesische Schriftzeichen.

Was mache ich falsch ?

Reinhard Kern 21. Feb 2011 16:53

AW: Blockread konvertirungsprobleme von D5 nach D2010
 
Zitat:

Zitat von h_johr (Beitrag 1083258)
Mit der Umstellung auf D2010 ist der Vergleich von char und Array [0..0] of char nicht mehr möglich. ...

Hallo,

der hätte nie möglich sein dürfen, es muss MFELD1[0] heissen.

Gruss Reinhard

himitsu 21. Feb 2011 19:30

AW: Blockread konvertirungsprobleme von D5 nach D2010
 
MFELD1 ist ein statisches Array, das klappt schon, auch wenn die [0] nicht schaden kann,
aber seit Delphi 2009 ist ein Char 2 Bygte groß, da Char = WideChar und SizeOf(WideChar) = 2.
Davor war Char = AnsiChar und demnach 1 Byte groß-

Lösung: nimm AnsiChar und verwende zuküftig niewieder dynamische Typen zum Speichern (kein Char, kein Integer, kein Real usw.)

h_johr 21. Feb 2011 23:11

AW: Blockread konvertirungsprobleme von D5 nach D2010
 
Hi himitsu,

私は、おかげでそれを理解する
(Watashi wa, okage de sore o rikai suru):thumb:

Kunst kommt eben von Können und nicht von Wollen,
sonst hieße es Wunst!

Mit AnsiChar klappt es wie in Delphi5 auch ohne [0]!

あなたの知識をありがとう!
(Anata no chishiki o arigatō!)


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:07 Uhr.

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