![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Типизированный текстовый файл. Переход с Delphi 7 на Delphi XE
I_D © (2011-12-04 12:14:00)Доброго времени суток!
Новую версию программы перевожу с Delphi 7 на Delphi XE. Необходимо соблюсти совместимость к уже наработанным программой фалами с данными. Использовал типизированные текстовые файлы. Хранил там криптованный текст. На Delphi 7 выглядело так (упрощенный пример)
procedure TForm3.Button1Click(Sender: TObject);
type
DataFile = record
BegCyc: TDate;
Colday: 0..31;
NoteCyc: string[255];
end;
var
DataArray: array of DataFile;
FData: file of DataFile;
i: integer;
df : DataFile;
function Crypt(varStr: String):String;
var
k: integer;
s: string;
begin
RandSeed:=100;
s:=varStr;
for k:=1 to Length(s) do
s[k]:=Chr(ord(s[k]) xor (Random(255)+1));
Crypt:=s;
end;
begin
// присваиваю значение массиву
SetLength(DataArray,1);
DataArray[0].BegCyc := now;
DataArray[0].Colday := 1;
DataArray[0].NoteCyc := Crypt('тест'); // криптую
// записываю в файл файл
AssignFile(FData, ExtractFilePath(Application.ExeName)+'test.txt'); { File selected in dialog box }
ReWrite(FData);
Seek(FData, FileSize(FData));
for i:=0 to Length(DataArray)-1 do
begin
Write(FData, DataArray[i]);
end;
CloseFile(FData);
// обнуляю массив
SetLength(DataArray, 0);
// считываю с файла
AssignFile(FData, ExtractFilePath(Application.ExeName)+'test.txt'); { File selected in dialog box }
Reset(FData);
Seek(FData,0);
SetLength(DataArray, FileSize(FData));
i:=0;
try
while not Eof(FData) do
begin
Read(FData, df);
DataArray[i]:=df;
DataArray[i].NoteCyc:=Crypt(DataArray[i].NoteCyc); // декриптую
i:=i+1;
end;
except
end;
CloseFile(FData);
// должно быть соло тест
label1.Caption := DataArray[0].NoteCyc;
end;
В Delphi XE ShortString юникод не поддерживает, по этому переделал так
type
MyShortStr = array[0..127] of WideChar;
DataFile = record
BegCyc: TDate;
Colday: 0..31;
NoteCyc: MyShortStr;
end;
Из текстового файла предыдущей версии программы даты считываются нормально, но вот поле NoteCyc имеет китайские иероглифы :) Подскажите, пожалуйста, корректное решение в моей ситуации?
Спасибо.
I_D (2011-12-04 17:41:00) [1]
> Плохиш
Думаю, что ты знаешь в Делфи еще меньше меня. Разводишь словоблудие вокруг простого вопроса с простым примером.
Gu - подсказал по теме, а ты - клавиатуру топчешь.
Плохиш (2011-12-04 17:33:00) [2]
> Хватит новичка ногами пинать
Кому ты нужен?
К тому же уже подсказали уже, остальное в справке описано.
Плохиш (2011-12-04 17:28:00) [3]
> Я по образованию электро-механик
И что? пту закончил и только провода прикрутить умеешь, и то под руководством?
I_D (2011-12-04 17:10:00) [4]
> почему бы не прочитать string types в хелпе?
Хватит новичка ногами пинать :) Подскажи, если знаешь. Ну а с хелпа я начинал. Не нашел там то что искал. Не свыкся я еще с хелпом от Delphi XE
I_D (2011-12-04 17:00:00) [5]
> Как ты смеешь над "высшим образованием" издеваться?
Я по образованию электро-механик :)
I_D (2011-12-04 16:50:00) [6]
> Как ты смеешь над "высшим образованием" издеваться?
Я по образованию электро-механик :)
Плохиш (2011-12-04 16:28:00) [7]
> MBo © (04.12.11 15:51) [5]
>
> почему бы не прочитать string types в хелпе?
Как ты смеешь над "высшим образованием" издеваться?
MBo (2011-12-04 15:51:00) [8]почему бы не прочитать string types в хелпе?
I_D (2011-12-04 15:02:00) [9]
> shortstring=ansistring[255]
procedure TForm3.Button1Click(Sender: TObject);
var
sstr: ansistring[255];
begin
end;
[DCC Error] Unit3.pas(28): E2029 ';' expected but '[' found
:(
Gu (2011-12-04 14:02:00) [10]аналогия d7-Xe
string=ansistring
shortstring=ansistring[255] (думаю, тк будет лучше, а не shortstring=shortstring)
char=ansichar (а не wide как у вас)
если у вас все string до 255 тогда и string=ansistring[255]
переделайте соответсвенно и все заработает
еще советую почитть
http://easyprog.ru/index.php?option=com_content&task=view&id=218&Itemid=35
и
http://embt.ru/reasonds-to-migrate-to-delphi-xe-rus.pdf(там про строки абзац 100% Unicode)
Плохиш (2011-12-04 13:27:00) [11]
> В Delphi XE ShortString юникод не поддерживает
Они юникода отрадясь не поддерживали.
Anatoly Podgoretsky (2011-12-04 12:19:00) [12]Типизированых текстовых файлов не бывает.