Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.75/16: Рейтинг темы: голосов - 16, средняя оценка - 4.75
 Аватар для S1deX
22 / 22 / 1
Регистрация: 04.01.2011
Сообщений: 67

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

10.08.2011, 14:21. Показов 3225. Ответов 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru