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

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

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

Author24 — интернет-сервис помощи студентам
Добрый день, ребята помогите разобраться с проблемой, читаю бинарный файл с последующим отображением содержимого в компоненте 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.06.2011, 16:12
Ответы с готовыми решениями:

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

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

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

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

18
return (true);
1976 / 1111 / 221
Регистрация: 19.04.2011
Сообщений: 2,345
10.06.2011, 17:10 2
Такой огород вместо Memo1->Lines->LoadFromFile печален
0
1 / 1 / 0
Регистрация: 05.05.2011
Сообщений: 22
10.06.2011, 17:22  [ТС] 3
Такое решение напрашивается само собой, но к сожалению не снимает проблемы с кодировкой
0
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
10.06.2011, 17:31 4
C++
1
2
...->SaveToFile(L"Привет медвед");
...->SaveToFile(WideString("Привет медвед"));
msdn
microsoft
0
1 / 1 / 0
Регистрация: 05.05.2011
Сообщений: 22
10.06.2011, 18:32  [ТС] 5
Файл который я читаю с лету в memo не загружается, появляется только первая строчка в виде абракадабры
0
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
10.06.2011, 20:32 6
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  [ТС] 7
Как же мне решить эту проблему, ведь я его почти прочитал, не коректно отображаются только символы на кирилице
0
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
10.06.2011, 23:11 8
Если файл не бинарный, а проблема только с кодировкой, могут помочь вот такие варианты
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  [ТС] 9
Maluda, я попробовал твой код, на варианте Sysutils::TEncoding::Unicode пишет абракадабру, а на остальных ничего не показывает. Прикрепиь файл не удается, пишет некорректный файл.
0
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
10.06.2011, 23:56 10
в rar\zip упакуй *facepalme*
0
365 / 247 / 24
Регистрация: 03.04.2011
Сообщений: 558
Записей в блоге: 1
11.06.2011, 11:10 11
Ну вы даете!!! если файл бинарный, первое что необходимо знать это структуру бинарника...
1. Ты знаешь?
Далее...это с++, используй TFileStream или fstream.

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

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

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

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

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

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

Вопрос тогда другой.
Как ты записал туда информацию? Это необходимо знать, так как если ошибешься хотя бы на байт, информацию считает не правильно!!!
1
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
11.06.2011, 17:23 17
Файл текстовый, кодировка 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  [ТС] 18
Привет всем, спасибо за посильную помощь. Но вопрос как изменить кодировку прочитанной информации для отображения в Memo в нормальном виде все еще остается не решенным. Что касается файла то пишу его не я моя задача представить информацию в нем в удобоваримом виде.

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

i
C++
1
2
nfile.getline(s,80);
     Memo1->Lines->Add(s);
должно быть преобразование переменной s для правильного отображения в Memo.
0
LK
Заблокирован
12.06.2011, 20:22 19
а почитать самому про ОЕМ в АНСИ и пр. ? где найти ? в интернете, быстрее всего...
0
12.06.2011, 20:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.06.2011, 20:22
Помогаю со студенческими работами здесь

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

Чтение бинарного файла в строку: читается только один байт
Читаю бинарный файл в строку, но почему-то читает только 1 байт. Где здесь может быть ошибка?...

Чтение бинарного файла - чтение первых 9 байт
Есть код, который читает первые 9 байт бинарного файла(заголовок записи) void...

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


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru