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

Чтение бинарного файла

10.06.2011, 16:12. Показов 8262. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, ребята помогите разобраться с проблемой, читаю бинарный файл с последующим отображением содержимого в компоненте Memo. При этом текст набранный кирилицей отображается в виде абракадабры, перепробовал разные варианты все в пустую. Я разрабатываю в CodeGear 2009, а в этой версии они перешли на Unicode и поэтому нужно преобразовать формат данных. Ниже приведен код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
void __fastcall TfData::BitBtn1Click(TObject *Sender)
{
FILE *fi;
char s[80];
Memo1->Clear();
 
AnsiString NameFile;
OpenDialogRDF->Title = "Открытие файла";
OpenDialogRDF->Options.Clear();
OpenDialogRDF->Options << ofAllowMultiSelect << ofFileMustExist;
OpenDialogRDF->Filter = "Fly files (*.dat)|*dat|All files (*.*)|*.*";
OpenDialogRDF->FilterIndex = 0; // start the dialog showing rdf files
 
if (OpenDialogRDF->Execute())
{
 NameFile = OpenDialogRDF->FileName.c_str();
 Edit1->Text = NameFile;
 
   if ((fi = fopen(NameFile.c_str(), "rb"))!=NULL)
   {
     ifstream infile(NameFile.c_str());
     while(!infile.eof())
     {
     infile.getline(s,80);
     Memo1->Lines->Add(s);
     }
     infile.close();
   }
 
   else if ((fi = fopen(NameFile.c_str(), "rb")) == NULL)
   {
   ShowMessage("Файл не удается открыть");
   return;
   }
}
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.06.2011, 16:12
Ответы с готовыми решениями:

Чтение бинарного файла
Здравствуйте! Не могу прочитать бинарный файл, уже весь интернет обшарил, по пять страниц в гугле, все примеры перепробовал, но никак не...

Чтение бинарного файла
Здравствуйте! Я пробую прочитать бинарный файл от CAD системы (он представляет из себя архив в иде .prt) Пробую открыть его как текстовый...

Переписать код с C# - чтение информации из бинарного файла
Есть код приведенный на одном из стороннем форуме, который читает данные из бинарного файла. Как мне его под билдер переписать? Вот...

18
return (true);
 Аватар для mimicria
1977 / 1112 / 221
Регистрация: 19.04.2011
Сообщений: 2,346
10.06.2011, 17:10
Такой огород вместо Memo1->Lines->LoadFromFile печален
0
1 / 1 / 0
Регистрация: 05.05.2011
Сообщений: 22
10.06.2011, 17:22  [ТС]
Такое решение напрашивается само собой, но к сожалению не снимает проблемы с кодировкой
0
 Аватар для QVO
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
10.06.2011, 17:31
C++
1
2
...->SaveToFile(L"Привет медвед");
...->SaveToFile(WideString("Привет медвед"));
msdn
microsoft
0
1 / 1 / 0
Регистрация: 05.05.2011
Сообщений: 22
10.06.2011, 18:32  [ТС]
Файл который я читаю с лету в memo не загружается, появляется только первая строчка в виде абракадабры
0
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
10.06.2011, 20:32
Arushan, если файл бинарный, ты не можешь его загрузить как текстовый файл!!!

Добавлено через 3 минуты
http://ru.wikipedia.org/wiki/Двоичный_файл

http://ru.wikipedia.org/wiki/Текстовый_файл

Все числа, содержащиеся в двух бинарных файлах одновременно, переписать в третий файл
0
1 / 1 / 0
Регистрация: 05.05.2011
Сообщений: 22
10.06.2011, 20:57  [ТС]
Как же мне решить эту проблему, ведь я его почти прочитал, не коректно отображаются только символы на кирилице
0
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
10.06.2011, 23:11
Если файл не бинарный, а проблема только с кодировкой, могут помочь вот такие варианты
C++
1
Memo1->Lines->LoadFromFile(OpenDialogRDF->FileName,Sysutils::TEncoding::UTF8);
или Sysutils::TEncoding::UTF7 или Sysutils::TEncoding::Unicode и т.д

Добавлено через 29 минут
Если хочешь, можешь прикрепить свой файл, я тебе скажу, какой он - бинарный или нет.
Если текстовый, скажу, в какой кодировке.

Или сам:
1. Открываешь в Акелпаде
2. Если файл будет бинарным, акелпад выдаст предупреждение
3. Если файл текстовый, внизу окна, в статус баре будет поле "определить кодировку"
4. Нажимаешь на него, будет определена кодировка
0
1 / 1 / 0
Регистрация: 05.05.2011
Сообщений: 22
10.06.2011, 23:40  [ТС]
Maluda, я попробовал твой код, на варианте Sysutils::TEncoding::Unicode пишет абракадабру, а на остальных ничего не показывает. Прикрепиь файл не удается, пишет некорректный файл.
0
 Аватар для QVO
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
10.06.2011, 23:56
в rar\zip упакуй *facepalme*
0
 Аватар для pomkalk
365 / 247 / 24
Регистрация: 03.04.2011
Сообщений: 558
Записей в блоге: 1
11.06.2011, 11:10
Ну вы даете!!! если файл бинарный, первое что необходимо знать это структуру бинарника...
1. Ты знаешь?
Далее...это с++, используй TFileStream или fstream.

Добавлено через 1 минуту
2. от куда у тебя этот файл?
0
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
11.06.2011, 11:38
Arushan, я же тебе написал если файл не бинарный!!!

Короче, прикрепляй файл и получишь по нему полный расклад.

Цитата Сообщение от Maluda Посмотреть сообщение
Arushan, если файл бинарный, ты не можешь его загрузить как текстовый файл!!!

Цитата Сообщение от pomkalk Посмотреть сообщение
если файл бинарный, первое что необходимо знать это структуру бинарника
0
1 / 1 / 0
Регистрация: 05.05.2011
Сообщений: 22
11.06.2011, 13:26  [ТС]
Привет всем, файл упаковал надеюсь теперь получится.
Вложения
Тип файла: rar fly.rar (1.44 Мб, 34 просмотров)
0
 Аватар для pomkalk
365 / 247 / 24
Регистрация: 03.04.2011
Сообщений: 558
Записей в блоге: 1
11.06.2011, 13:42
3. зачем ты его скинул!

структура у файла какая?
0
1 / 1 / 0
Регистрация: 05.05.2011
Сообщений: 22
11.06.2011, 14:01  [ТС]
Файл просил Maluda.

Добавлено через 2 минуты
Что касается структуры, то он состоит из области заголовка в которой содержится описание записанной информации (дата, размер и пр.) и области данных.
0
 Аватар для pomkalk
365 / 247 / 24
Регистрация: 03.04.2011
Сообщений: 558
Записей в блоге: 1
11.06.2011, 14:47
структура описывается как
C++
1
2
3
4
struct StructName
{
     Param Param1;
};
либо в бинарники пишутся в определенной последовательности данные.

Вопрос тогда другой.
Как ты записал туда информацию? Это необходимо знать, так как если ошибешься хотя бы на байт, информацию считает не правильно!!!
1
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
11.06.2011, 17:23
Файл текстовый, кодировка 866 OEM русская

Первая часть файла вот такая

**************************************** ********************
TN-Reader версия 3.2.1.55 Nov 11 2004 тел.(095)556-73-91
кассета версия 500, серийный N 124, устройство сбора - ТН1ПК, серийный N 200124
Файл данных
**************************************** ********************
Изделие "Ми-28Н", бортовой N 304, полет N 1 - 17.03.2009 в 14:00
Режим N 1 из 3, размер режима - 2*375*389*184 байт
ЗАПИСЬ - 17.03.2009, Начало в 0:31:51, Окончание в 1:38:25
ЧТЕНИЕ - 29.04.2011 в 15:58
**************************************** ********************
Задание - N 1, размер задания - 32896 байт
------------------------------------------------------------
Частота следования меток времени - 1024 Гц
Последовательный код RS - Линии:
Линия 1 - код RS-422/485, частота = 115.2 кБод, длина слова = 8 бит,
число стоп-битов - 1, четность - без четности
Линия 2 - код RS-422/485, частота = 115.2 кБод, длина слова = 8 бит,
число стоп-битов - 1, четность - без четности
Последовательный код МКИО - Линии:
Основная линия 1
Резервная линия 1
Основная линия 2
Резервная линия 2
Параллельный код - Гамма-К
Информация ARINC - Регистрация с прореживанием - Адреса:
Вход 0 адрес 000 - коэффициент прореживания = 1
Вход 0 адрес 001 - коэффициент прореживания = 1
Вход 0 адрес 002 - коэффициент прореживания = 1
Вход 0 адрес 003 - коэффициент прореживания = 1
Вход 0 адрес 004 - коэффициент прореживания = 1
Вход 0 адрес 005 - коэффициент прореживания = 1
Вход 0 адрес 006 - коэффициент прореживания = 1
Вход 0 адрес 007 - коэффициент прореживания = 1
Вход 0 адрес 010 - коэффициент прореживания = 1
Вход 0 адрес 011 - коэффициент прореживания = 1
Вход 0 адрес 012 - коэффициент прореживания = 1
Вход 0 адрес 013 - коэффициент прореживания = 1
Вход 0 адрес 014 - коэффициент прореживания = 1
Вход 0 адрес 015 - коэффициент прореживания = 1
Вход 0 адрес 016 - коэффициент прореживания = 1
Вход 0 адрес 017 - коэффициент прореживания = 1
Вход 0 адрес 020 - коэффициент прореживания = 1
Вход 0 адрес 021 - коэффициент прореживания = 1
Вход 0 адрес 022 - коэффициент прореживания = 1
Вход 0 адрес 023 - коэффициент прореживания = 1
Вход 0 адрес 024 - коэффициент прореживания = 1
Вход 0 адрес 025 - коэффициент прореживания = 1
Вход 0 адрес 026 - коэффициент прореживания = 1
Вход 0 адрес 027 - коэффициент прореживания = 1
Вход 0 адрес 030 - коэффициент прореживания = 1
Вход 0 адрес 031 - коэффициент прореживания = 1
Вход 0 адрес 032 - коэффициент прореживания = 1
Вход 0 адрес 033 - коэффициент прореживания = 1
Вход 0 адрес 034 - коэффициент прореживания = 1
Вход 0 адрес 035 - коэффициент прореживания = 1
Вход 0 адрес 036 - коэффициент прореживания = 1
Вход 0 адрес 037 - коэффициент прореживания = 1
Вход 0 адрес 040 - коэффициент прореживания = 1
Вход 0 адрес 041 - коэффициент прореживания = 1
Вход 0 адрес 042 - коэффициент прореживания = 1
Вход 0 адрес 043 - коэффициент прореживания = 1
Вход 0 адрес 044 - коэффициент прореживания = 1
Вход 0 адрес 045 - коэффициент прореживания = 1
Вход 0 адрес 046 - коэффициент прореживания = 1
Вход 0 адрес 047 - коэффициент прореживания = 1
Вход 0 адрес 050 - коэффициент прореживания = 1
Вход 0 адрес 051 - коэффициент прореживания = 1
Вход 0 адрес 052 - коэффициент прореживания = 1
Вход 0 адрес 053 - коэффициент прореживания = 1
Вход 0 адрес 054 - коэффициент прореживания = 1
Вход 0 адрес 055 - коэффициент прореживания = 1
Вход 0 адрес 056 - коэффициент прореживания = 1
Вход 0 адрес 057 - коэффициент прореживания = 1
Вход 0 адрес 060 - коэффициент прореживания = 1
Вход 0 адрес 061 - коэффициент прореживания = 1
Вход 0 адрес 062 - коэффициент прореживания = 1
Вход 0 адрес 063 - коэффициент прореживания = 1
Вход 0 адрес 064 - коэффициент прореживания = 1
Вход 0 адрес 065 - коэффициент прореживания = 1
Вход 0 адрес 066 - коэффициент прореживания = 1
Вход 0 адрес 067 - коэффициент прореживания = 1
Вход 0 адрес 070 - коэффициент прореживания = 1
Вход 0 адрес 071 - коэффициент прореживания = 1
Вход 0 адрес 072 - коэффициент прореживания = 1
Вход 0 адрес 073 - коэффициент прореживания = 1
Вход 0 адрес 074 - коэффициент прореживания = 1
Вход 0 адрес 075 - коэффициент прореживания = 1
Вход 0 адрес 076 - коэффициент прореживания = 1
Вход 0 адрес 077 - коэффициент прореживания = 1
Вход 0 адрес 100 - коэффициент прореживания = 1
Вход 0 адрес 101 - коэффициент прореживания = 1
Вход 0 адрес 102 - коэффициент прореживания = 1
Вход 0 адрес 103 - коэффициент прореживания = 1
Вход 0 адрес 104 - коэффициент прореживания = 1
Вход 0 адрес 105 - коэффициент прореживания = 1
Вход 0 адрес 106 - коэффициент прореживания = 1
Вход 0 адрес 107 - коэффициент прореживания = 1
Вход 0 адрес 110 - коэффициент прореживания = 1
Вход 0 адрес 111 - коэффициент прореживания = 1
Вход 0 адрес 112 - коэффициент прореживания = 1
Вход 0 адрес 113 - коэффициент прореживания = 1
Вход 0 адрес 114 - коэффициент прореживания = 1


Добавлено через 1 минуту
Остальная часть - это шифрованные данные - очень похоже на бортовой самописец или "чёрный ящик"
по другому

Добавлено через 1 минуту
Arushan, короче ты решил стать самым умным и расшифровать "чёрный ящик" вертолёта

Для этого есть специальный код дешифровки!!!
1
1 / 1 / 0
Регистрация: 05.05.2011
Сообщений: 22
12.06.2011, 10:49  [ТС]
Привет всем, спасибо за посильную помощь. Но вопрос как изменить кодировку прочитанной информации для отображения в Memo в нормальном виде все еще остается не решенным. Что касается файла то пишу его не я моя задача представить информацию в нем в удобоваримом виде.

Добавлено через 3 минуты
Я предполагаю, что здесь

i
C++
1
2
nfile.getline(s,80);
     Memo1->Lines->Add(s);
должно быть преобразование переменной s для правильного отображения в Memo.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
12.06.2011, 20:22
а почитать самому про ОЕМ в АНСИ и пр. ? где найти ? в интернете, быстрее всего...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.06.2011, 20:22
Помогаю со студенческими работами здесь

Чтение/запись определенного количества байт из бинарного файла
Подскажите пожалуста как реализовать на с++ в RAD Studio чтение определенного количества байт из нетекстового файла,а так же запись по...

Чтение бинарного файла и построение графика на основе его данных
Начал изучать c++ builder недавно и столкнулся с проблемой. Надо построить график, и при этом чтобы по одной кнопке происходила запись, а...

Чтение бинарного файла в строку: читается только один байт
Читаю бинарный файл в строку, но почему-то читает только 1 байт. Где здесь может быть ошибка? //ЧТЕНИЕ БИНАРНОГО ФАЙЛА В СТРОКУ FILE *f...

Чтение бинарного файла - чтение первых 9 байт
Есть код, который читает первые 9 байт бинарного файла(заголовок записи) void ATS44Encoder::FileEncode() { QFile* file = new...

Внешняя сортировка бинарного файла (чтение после конца файла невозможно)
Помогите отладить программу, не вижу, что здесь можно сделать. Похоже, курсор файла где-то в коде сортировки доходит до конца, но потом все...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 30.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru