Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запись в Ini-файл, Самопреобразование 
:(
    Опции темы
PROeXT
  Дата 29.11.2006, 02:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 12.12.2005
Где: Москва

Репутация: нет
Всего: нет



Проблема такая: с Вашего форума взял пример кодировки/раскодировки строк. Вот он:

Код

Function Codec(Input, Key: PChar): PChar;
Var
 I:Integer;
 J:Integer;
 Tmps:String;
 Text:String;
Begin
 Result:=PAnsiChar('');
 Text:=Input;
 For I:=1 To Length(Text) Do
 Begin
  IF I>Length(Key) Then J:=I Mod Length(Key)  Else J:=I;
  Tmps:=Tmps+Chr((Ord(Text[I])) XOR (Ord(Key[J])));
 End; {For}
 Result:=PChar(Tmps);
end;


Однако, когда я начинаю записывать полученные закодированные строки в файл ini, то в этот файл на самом деле записывается совсем не то. Идет подмена символов. Что самое интересное, делаю вот так:

Код

  Str.Add(Codec(PChar(ConnectSection),PChar(GetCompName))); //0
  ...
  Str.Add(Codec(PChar(ConnectLoginIdent),PChar(GetCompName))); //3
  Str.Add(Codec(PChar(edLogin.Text),PChar(GetCompName)));  //4

  With Ini Do
  Begin
   ....
   WriteString(Str.Strings[0],Str.Strings[3],Str.Strings[4]); //Строка 1
   ShowMessage(ReadString(Str.Strings[0],Str.Strings[3],''));  //Строка 2
  End; {With}


И вот в строке 1 значение Str.Strings[4] не совпадает с тем, что выводит ShowMessage(строка 2). И что самое интересное - ShowMesssage вообще показывает пустую строку!!!
Никто не знает, в чем может быть проблема и как ее можно обойти?

Да, в работе использовалась Delphi 7 Enterprise
PM MAIL ICQ   Вверх
pavelv
Дата 29.11.2006, 07:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 5.2.2006

Репутация: нет
Всего: нет



Я не спец, но всё-таки ShowMessage возвращает пустую строку скорее всего потому, что в ini файле просто нет таких записей. Тоесть вот такая штука:
ShowMessage(ReadString(Str.Strings[0],Str.Strings[3],'Error')); вернет тебе 'Error'.

Если не хочешь пошагово глянуть все параметры, для теста сделай вот так:
Код

  WriteString(Str.Strings[0],Str.Strings[3],'test string'); //Строка 1    
   ShowMessage(ReadString(Str.Strings[0],Str.Strings[3],'Error'));  //Строка 2

Если ShowMessage покажет 'test string' разбирайся с codec, если 'Error' кидай полный код своих процедур.
PM MAIL   Вверх
Guedda
Дата 29.11.2006, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 14
Всего: 78



В ини файлах все данные записываются только после закрытия файла. Т.е. после IniFile.Free; до этого они хранятся в оперативной памяти. Поэтому делай ShowMessage только после закрытия файла.


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
PROeXT
Дата 29.11.2006, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 12.12.2005
Где: Москва

Репутация: нет
Всего: нет



Цитата(pavelv @  29.11.2006,  07:06 Найти цитируемый пост)
Я не спец, но всё-таки ShowMessage возвращает пустую строку скорее всего потому, что в ini файле просто нет таких записей


Так ведь и я  об этом же.

Вот пример: трассирую выполнение. Дохожу до строки кода IniFile.WriteString... Вижу, что будет записываться ветка abcd=jkl. Выполняю. Закрываю прогу. Открываю ini средствами ОС. И что я вижу? Вместо abcd=jkl записано dnjf=eif.

Насчет кода.... Ну так вроде я и так уже весь код практически выложил... Или что-то не хватает?
PM MAIL ICQ   Вверх
Elfebet
Дата 29.11.2006, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 545
Регистрация: 15.5.2006
Где: Украина. Запорожь е.

Репутация: 2
Всего: 14



Цитата

 With Ini Do
  Begin
   ....
   WriteString(Str.Strings[0],Str.Strings[3],Str.Strings[4]); //Строка 1
   ShowMessage(ReadString(Str.Strings[0],Str.Strings[3],''));  //Строка 2
  End; {With}

 И вот в строке 1 значение Str.Strings[4] не совпадает с тем, что выводит ShowMessage(строка 2). И что самое интересное - ShowMesssage вообще показывает пустую строку!!!


Цитата

В ини файлах все данные записываются только после закрытия файла. Т.е. после IniFile.Free; до этого они хранятся в оперативной памяти. Поэтому делай ShowMessage только после закрытия файла. 


зачем ты делаеш
Код

ShowMessage(ReadString(Str.Strings[0],Str.Strings[3],''));  //Строка 2

если еще не записалось в файл
Код

WriteString(Str.Strings[0],Str.Strings[3],Str.Strings[4]); //Строка 1



--------------------
Программист не должен всё знать... он должен знать где можно посмотреть
PM MAIL ICQ GTalk   Вверх
Guedda
Дата 29.11.2006, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 14
Всего: 78



Просто сделай так, если уж хочешь посмотреть на содержимое инифайла:
Код

  Str.Add(Codec(PChar(ConnectSection),PChar(GetCompName))); //0
  ...
  Str.Add(Codec(PChar(ConnectLoginIdent),PChar(GetCompName))); //3
  Str.Add(Codec(PChar(edLogin.Text),PChar(GetCompName)));  //4
   ....
   Ini.WriteString(Str.Strings[0],Str.Strings[3],Str.Strings[4]); //Строка 1
   Ini.Free;
   Ini := TIniFile.Create('YourNameIni.ini');
   ShowMessage(ReadString(Str.Strings[0],Str.Strings[3],''));  //Строка 2
  End; {With}

и тогда в ShowMessage появится твои данные.


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
PROeXT
Дата 29.11.2006, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 12.12.2005
Где: Москва

Репутация: нет
Всего: нет



Цитата(Guedda @  29.11.2006,  11:58 Найти цитируемый пост)
 тогда в ShowMessage появится твои данные.


Я делал иначе: после окончания работы проги, я делал Ini.Free, а потом открывал файл в проводнике и видел, что то, что туда записалось СУЩЕСТВЕННО ОТЛИЧАЛОСЬ ОТ 

Код

Ini.WriteString(Str.Strings[0],Str.Strings[3],Str.Strings[4]);


По моему мнению, это какая-то ошибка с преобразованием и записью символов в текстовый файл (ведь по сути, ini-файл текстовый, не так ли?)....

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0483 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.