Аватар для S1deX
22 / 22 / 1
Регистрация: 04.01.2011
Сообщений: 67

Корректно загрузить содержимое файла

10.08.2011, 14:21. Показов 3244. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Необходимо загрузить содержимое файла в мемо. Но проблема вот в чем: между фразами в строке присутствуют null байты, т.е. '\x00'. А при загрузке, все, что находится после этого байта - обрезается. Так вот, мне нужно загрузить все фразы, при этом, по возможности, заменяя null байты на символ переноса строки.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.08.2011, 14:21
Ответы с готовыми решениями:

Не удается корректно прочитать содержимое текстового файла (MFC)
Нужно присвоить переменной типа CString содержимое текстового файла, учитывая \r\n \0. Проблема в том, что теряются символы перевода строки...

Загрузить содержимое исполняемого файла
У меня есть свое расширение (*.Format) - это по идее обычный Ini-файл, который представляет из себя файл визуальных настроек...

Загрузить в RichTextBox содержимое текстового файла
Как мне сделать что бы после того как я нажал открыть то открывался txt файл в richTextBox1? Да и как сделать отображение номера строки как...

21
 Аватар для SalterOk
117 / 114 / 10
Регистрация: 02.06.2011
Сообщений: 280
10.08.2011, 14:35
Как memo считывает файлы я не знаю - мож он считывает все ток не показывает или до null читает?
Но можно еще так сделать:
читать файл потоком (ток походу нужно НЕ как текстовый открывать)
и далее заменяем все null на какойто символ-разделитель

и что это за текстовый файл такой нестандартный?
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
10.08.2011, 14:39
C++
1
2
3
4
5
6
7
TStringList list = new TSringList;
list->LoadFromFile("file.txt");
for (int i=0; i<= list-Count-1; i++) {
  list->Strings[i] = StringReplace(list->Strings[i],"\x00,"\n",
                     TReplaceFlags() <<rfReplaceAll<<rfIgnoreCase);
  Memo1->Lines->Add(list->Strings[i]);
}
1
 Аватар для S1deX
22 / 22 / 1
Регистрация: 04.01.2011
Сообщений: 67
10.08.2011, 14:44  [ТС]
Цитата Сообщение от LK Посмотреть сообщение
C++
1
2
3
4
5
6
7
TStringList list = new TSringList;
list->LoadFromFile("file.txt");
for (int i=0; i<= list-Count-1; i++) {
  list->Strings[i] = StringReplace(list->Strings[i],"\x00,"\n",
                     TReplaceFlags() <<rfReplaceAll<<rfIgnoreCase);
  Memo1->Lines->Add(list->Strings[i]);
}
Уже пробовал, не помогло.

SalterOk, это ответ сервера на UDP запрос. Просто я его сразу записываю в файл.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
10.08.2011, 14:49
SalterOk, мемо считывает файл просто:
C++
1
Memo->Lines->LoadFromFile(filename);
Добавлено через 1 минуту
S1deX, что "не помогло" ? ни сообщений, ни ошибок ? будьте любезны объяснить подробнее.
1
 Аватар для S1deX
22 / 22 / 1
Регистрация: 04.01.2011
Сообщений: 67
10.08.2011, 14:52  [ТС]
Цитата Сообщение от LK Посмотреть сообщение
SalterOk, мемо считывает файл просто:
C++
1
Memo->Lines->LoadFromFile(filename);
Добавлено через 1 минуту
S1deX, что "не помогло" ? ни сообщений, ни ошибок ? это вам надо - будьте любезны объяснить подробнее.
Без проблем, объясняю.

Вот мой код:
C++
1
2
3
4
5
6
7
8
9
10
void __fastcall TForm1::IdUDPServer1UDPRead(TObject *Sender,
      TStream *AData, TIdSocketHandle *ABinding)
{
 TStringList* list = new TStringList;
 list->LoadFromStream(AData);
 for (int i=0; i<= list->Count-1; i++) {
  list->Strings[i] = StringReplace(list->Strings[i],"\x00","\n", TReplaceFlags() <<rfReplaceAll<<rfIgnoreCase);
  Memo1->Lines->Add(list->Strings[i]);
 }
}
В мемо все равно текст до первого null-байта.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
10.08.2011, 15:09
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  TStringList *list = new TStringList();
  char buf = '\x00';
  list->Add(buf);
  list->Add("Admins");
  list->Add(buf);
  list->Add("identity");
  list->Add(buf);
  list->Add("group");
  list->Add(buf);
  list->Add("Коммантарий");
  Memo1->Clear();
  for (int i = 0; i <= list->Count-1; i++) {
    list->Strings[i] = StringReplace(list->Strings[i], '\x00', '\n',
                       TReplaceFlags() << rfReplaceAll << rfIgnoreCase);
    Memo1->Lines->Add(list->Strings[i]);
  }
}
Миниатюры
Корректно загрузить содержимое файла  
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
10.08.2011, 15:19
гм, не то... хорошо бы кусок файла
Миниатюры
Корректно загрузить содержимое файла  
0
 Аватар для S1deX
22 / 22 / 1
Регистрация: 04.01.2011
Сообщений: 67
10.08.2011, 15:28  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
TStringList *list = new TStringList();
 char buf = '\x00';
 list->Add("Test text");
 list->Add(buf);
 list->Add("Test text #2");
 list->Add(buf);
 list->Add("Test text #3");
 list->Add(buf);
 list->SaveToFile("C:\\test.txt");
 
 list->Clear();
 list->LoadFromFile("C:\\test.txt");
 for (int i = 0; i <= list->Count-1; i++)
 {
  list->Strings[i] = StringReplace(list->Strings[i], '\x00', '\n',
                       TReplaceFlags() << rfReplaceAll << rfIgnoreCase);
  Memo1->Lines->Add(list->Strings[i]);
 }
 delete list;
 list = NULL;
Надеюсь теперь вы мне верите Кусок файла скопировать не могу, при копировании тоже обрезается до первого null байта
Миниатюры
Корректно загрузить содержимое файла  
0
 Аватар для SalterOk
117 / 114 / 10
Регистрация: 02.06.2011
Сообщений: 280
10.08.2011, 15:29
Ну если ты знаешь структуру ответа то можно все выводить.
Или лучше читай в цикле каждый байт со Stream и заменяй null'ы. А потом выводи в memo
0
 Аватар для S1deX
22 / 22 / 1
Регистрация: 04.01.2011
Сообщений: 67
10.08.2011, 15:31  [ТС]
Вот скриншот текста (в Notepad++)
Миниатюры
Корректно загрузить содержимое файла  
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
10.08.2011, 15:33
в каком формате данные ? hex ?
кусок файла было бы лучше
файл некопировать, а прикрепить к сообщению
0
 Аватар для S1deX
22 / 22 / 1
Регистрация: 04.01.2011
Сообщений: 67
10.08.2011, 15:37  [ТС]
Прикрепил сам файл.

SalterOk, хм, никогда не работал с TStream именно считывая его побайтово. Не могли бы вы привести пример?
Вложения
Тип файла: txt recv.txt (183 байт, 10 просмотров)
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
10.08.2011, 16:03
C++
1
2
TFileStream* fs=new TFileStream("recv.txt",fmOpenRead);
Memo1->Lines->LoadFromStream(fs);
1
 Аватар для S1deX
22 / 22 / 1
Регистрация: 04.01.2011
Сообщений: 67
10.08.2011, 16:12  [ТС]
Все равно текст в мемо только до первого null байта
Миниатюры
Корректно загрузить содержимое файла  
0
return (true);
 Аватар для mimicria
1977 / 1112 / 221
Регистрация: 19.04.2011
Сообщений: 2,346
10.08.2011, 16:23
Лучший ответ Сообщение было отмечено как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
 int handle=FileOpen("c:\\recv.txt",fmOpenRead);
 int fsize=FileSeek(handle,0,2);
 char buf[1];
 AnsiString res="";
 FileSeek(handle,0,0);
 for (int t=0;t<fsize;t++)
 {
  FileRead(handle,buf,1);
  if (!buf[0]) buf[0]=0xFF; // заменяете на что нужно
  res=res+buf[0];
 }
 FileClose(handle);
 Memo1->Lines->Add(res);
3
 Аватар для S1deX
22 / 22 / 1
Регистрация: 04.01.2011
Сообщений: 67
10.08.2011, 16:25  [ТС]
Цитата Сообщение от mimicria Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
 int handle=FileOpen("c:\\recv.txt",fmOpenRead);
 int fsize=FileSeek(handle,0,2);
 char buf[1];
 AnsiString res="";
 FileSeek(handle,0,0);
 for (int t=0;t<fsize;t++)
 {
  FileRead(handle,buf,1);
  if (!buf[0]) buf[0]=0xFF; // заменяете на что нужно
  res=res+buf[0];
 }
 FileClose(handle);
 Memo1->Lines->Add(res);
Огромное Вам спасибо!
0
5 / 5 / 0
Регистрация: 09.08.2011
Сообщений: 12
10.08.2011, 16:31
А почему бы не сделать так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
TStringList *strLst=new TStringList();
AnsiString asFileName="C:\\test.txt";
strLst->LoadFromFile(asFileName);
for(int i=0;i<strLst->Count;i++)
{
  AnsiString asStr=strLst->Strings[i];  
  while(asStr.Pos(AnsiString('\x00')))
  {
    Memo1->Lines->Add(asStr.SubString(1,asStr.Pos('\x00')-1));
    asStr.Delete(1,asStr.Pos('\x00')+AnsiString('\x00').Length()-1);
  }
  if(!asStr.IsEmpty()) Memo1->Lines->Add(asStr);
}
delete strLst;
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
10.08.2011, 16:40
потому, что там test.txt не .txt
1
5 / 5 / 0
Регистрация: 09.08.2011
Сообщений: 12
10.08.2011, 16:41
Понял...
Примите мои извинения, пожалуйста.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.08.2011, 16:41
Помогаю со студенческими работами здесь

Загрузить в TextBox содержимое файла Word
Нужно загрузить word файл в окно textbox. Работаю в VB 2010. Загрузка текстового файла типа TXT решается просто, а вот с файлами MS Office...

Как загрузить содержимое файла в richTextBox?
Для загрузки содержимого файла в richTextBox на кнопку написан вот такой код: private void button7_Click(object sender, EventArgs e)...

Загрузить содержимое файла в Memo по указанному пути
Не могу справиться с заданием по программированию на делфи. Плииииз помогите. На одном компоненте нужно указать место/ или же имя...

Как загрузить содержимое файла xlsx с использованием OpenFileDialog в RichTextBox или ListBox
Такая проблема.. Не могу найти информацию как загрузить содержимое файла xlsx с использованием OpenFileDialog в RichTextBox или ListBox. ...

Как корректно вывести содержимое массива?
Имеется массив с возможностью добавления заданного пользователем элемента при помощи нажатия кнопки: &lt;script...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru