Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чтение из udl файла, фактически чтение текстовых данных 
V
    Опции темы
Martin_8
Дата 2.2.2008, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здравствуйте, помогите, пожалуйста, разобраться.
Имеется udl файл с некой строкой соединения, фактически текстовые данные. Я пытаюсь прочитать этот файл целиком. И вывести хотя бы в memo.
Код


Memo1->Lines->LoadFromFile(GetCurrentDir() + "\\Connection\\ConnectionString.udl");

Пытаюсь прочитать и так:
Код

TStringList *sl = new TStringList;

sl->LoadFromFile(GetCurrentDir() + "\\Connection\\ConnectionString.udl");
ShowMessage(sl->Text);

Но я получаю вместо содержимого файла, лишь несколько символов:
 яю[ , хотя содержимое файла начинается с [oledb]

Подскажите, из-за чего происходит такая ситуация?  Как мне корректно прочитать свой файл ?

PM   Вверх
xvr
Дата 2.2.2008, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(Martin_8 @ 2.2.2008,  23:27)
Здравствуйте, помогите, пожалуйста, разобраться.
Имеется udl файл с некой строкой соединения, фактически текстовые данные. Я пытаюсь прочитать этот файл целиком. И вывести хотя бы в memo.
Код


Memo1->Lines->LoadFromFile(GetCurrentDir() + "\\Connection\\ConnectionString.udl");

Пытаюсь прочитать и так:
Код

TStringList *sl = new TStringList;

sl->LoadFromFile(GetCurrentDir() + "\\Connection\\ConnectionString.udl");
ShowMessage(sl->Text);

Но я получаю вместо содержимого файла, лишь несколько символов:
 яю[ , хотя содержимое файла начинается с [oledb]

Подскажите, из-за чего происходит такая ситуация?  Как мне корректно прочитать свой файл ?

Судя по 'яю[' твой файл записан в Unicode, прямая загрузка через LoadFromFile работать не будет, он расчитан на ASCII  smile 

PM MAIL   Вверх
Martin_8
Дата 3.2.2008, 00:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



xvr
Цитата

Судя по 'яю[' твой файл записан в Unicode, прямая загрузка через LoadFromFile работать не будет, он расчитан на ASCII


Спасибо, за подсказку. А как преобразовать ASCII в Unicode при чтении ? Или как правильно прочесть Unicode файл для моёго случая ? 

PM   Вверх
xvr
Дата 3.2.2008, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(Martin_8 @ 3.2.2008,  00:45)
xvr
Цитата

Судя по 'яю[' твой файл записан в Unicode, прямая загрузка через LoadFromFile работать не будет, он расчитан на ASCII


Спасибо, за подсказку. А как преобразовать ASCII в Unicode при чтении ? Или как правильно прочесть Unicode файл для моёго случая ?

Читаешь содержимое файла в строку (как есть), затем на нее натравливаешь функцию Utf8ToAnsi, получаешь в Ansi кодировке


PM MAIL   Вверх
Martin_8
Дата 3.2.2008, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Пробую читать содержимое файла, как есть, а потом применять Utf8ToAnsi. 

Код

TStringList *sl = new TStringList;

sl->LoadFromFile(GetCurrentDir() + "\\Connection\\ConnectionString.udl");
sl->Text=Utf8ToAnsi(sl->Text);
ShowMessage(sl->Text);


Не получается. В sl->Text пусто!  Подскажите, что я делаю неправильно? Почем не происходит чтение данных ? И как их можно прочитать применительно для моего случая ?  smile 


Это сообщение отредактировал(а) Martin_8 - 3.2.2008, 17:48
PM   Вверх
xvr
Дата 4.2.2008, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(Martin_8 @ 3.2.2008,  14:02)
Пробую читать содержимое файла, как есть, а потом применять Utf8ToAnsi. 

Код

TStringList *sl = new TStringList;

sl->LoadFromFile(GetCurrentDir() + "\\Connection\\ConnectionString.udl");
sl->Text=Utf8ToAnsi(sl->Text);
ShowMessage(sl->Text);


Не получается. В sl->Text пусто!  Подскажите, что я делаю неправильно? Почем не происходит чтение данных ? И как их можно прочитать применительно для моего случая ?  smile

TStringList не будет читать Unicode файл  smile Нужно читать прямо в строку:
Код

AnsiString buf;
TFileStream* fs=new TFileStream(GetCurrentDir() + "\\Connection\\ConnectionString.udl",fmOpenRead);
buf=AnsiString::StringOfChar(' ',fs->Size);
fs->ReadBuffer(buf.c_str(),fs->Size);
ShowMessage(Utf8ToAnsi(buf));
delete fs;

PM MAIL   Вверх
Martin_8
Дата 5.2.2008, 01:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



xvr, Спасибо за разъяснения с TStringList, за пример. 
Я считываю прямо в строку, как в вашем примере, но когда выполнение доходит до строчки 
Код

fs->ReadBuffer(buf.c_str(),fs->Size);
 я вижу что в buf.c_str() вместо содержимого моего файла, находятся только те самые символы яю[, и соответственно ShowMessage отображает уже пустую строку.

Сам udl файл присоединен. 
Его содержимое:
Код

[oledb]
; Everything after this line is an OLE DB initstring
Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=ripo_bd_1;Data Source=ROM


Быть может у Вас ещё имеются идеи почему происходит неправильное считывание (вернее оно фактически и не происходит) данных из этого файла ? Что ещё можно предпринять для разрешения этой ситуации ?  smile 


Это сообщение отредактировал(а) Martin_8 - 5.2.2008, 01:15

Присоединённый файл ( Кол-во скачиваний: 8 )
Присоединённый файл  ConnectionString.udl 0,35 Kb
PM   Вверх
dumb
Дата 5.2.2008, 02:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

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



Цитата(Martin_8 @  3.2.2008,  14:02 Найти цитируемый пост)
Пробую читать содержимое файла, как есть, а потом применять Utf8ToAnsi
гм. и причем тут Utf8?.. smile

Код

  TStringList *sl = new TStringList;
  TFileStream* fs = new TFileStream(GetCurrentDir() + "\\Connection\\ConnectionString.udl",fmOpenRead);
  char *buf = new char[fs->Size + 2];
  memset(buf, 0, fs->Size + 2);
  fs->ReadBuffer(buf, fs->Size);
  if (*(unsigned short*)buf == 0xFEFF)
    sl->Text = (wchar_t*)buf + 1;
  else
    sl->Text = buf;
//  ShowMessage(sl->Text);
  delete[] buf;
  delete fs;

  Memo1->Lines->AddStrings(sl);

  delete sl;


PM MAIL   Вверх
xvr
Дата 5.2.2008, 08:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(Martin_8 @ 5.2.2008,  01:12)
xvr, Спасибо за разъяснения с TStringList, за пример. 
Я считываю прямо в строку, как в вашем примере, но когда выполнение доходит до строчки 
Код

fs->ReadBuffer(buf.c_str(),fs->Size);
 я вижу что в buf.c_str() вместо содержимого моего файла, находятся только те самые символы яю[, и соответственно ShowMessage отображает уже пустую строку.

Сам udl файл присоединен. 
Его содержимое:
Код

[oledb]
; Everything after this line is an OLE DB initstring
Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=ripo_bd_1;Data Source=ROM


Быть может у Вас ещё имеются идеи почему происходит неправильное считывание (вернее оно фактически и не происходит) данных из этого файла ? Что ещё можно предпринять для разрешения этой ситуации ?  smile

Точно, не UTF-8 а чистый Unicode. См. код от dumb - должен работать

PM MAIL   Вверх
Martin_8
Дата 6.2.2008, 02:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо dumb и xvr за помощь.  smile 
dumb, Ваш код, это то, что надо   smile 
PM   Вверх
artsb
Дата 6.2.2008, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

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



dumb,  напиши коментов к своему коду, плиз.

А тут:
Код

if (*(unsigned short*)buf == 0xFEFF)

ты проверяешь кодировку?


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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