Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Типизированный текстовый файл. Переход с 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]

Типизированых текстовых файлов не бывает.


Наверх

Титульная страница Поиск, карта сайта Написать письмо