Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Бинарный файл в текстовый файл, нужно посмотреть содержимое бинарника 
V
    Опции темы
ElectroWave
Дата 10.5.2007, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Доброго время суток!
Нужна помощь. Есть бинарный файл с данными (численные значения). Как можно перегнать эти данные в текстовый файл? Для этого нужно знать структуру файла?
PM MAIL   Вверх
_hunter
Дата 10.5.2007, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



Цитата(ElectroWave @  10.5.2007,  14:09 Найти цитируемый пост)
Для этого нужно знать структуру файла?

естественно...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
ElectroWave
Дата 10.5.2007, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Предположим, я знаю структуру: 16 столбцов. Как узнать где именно нужно делать переход на другую строку или он сам перейдет если задать структуру?
Я тут в MSDN нашел такой примерчик, где здесь нужно поставить описание структуры: 

Код

// binary_read.cpp
// compile with: /clr
#include "stdafx.h"
#using<system.dll>
using namespace System;
using namespace System::IO;

int main() 
{
   String^ fileName = "test.out";
   String^ fileName_out = "textfile.txt";
   try
   {
      FileStream^ fs = gcnew FileStream(fileName, FileMode::Open);
      BinaryReader^ br = gcnew BinaryReader(fs);
      StreamWriter^ sw = gcnew StreamWriter(fileName_out);

      Console::WriteLine("contents of {0}:", fileName);
      while (br->BaseStream->Position < br->BaseStream->Length)
        sw->WriteLine(br->ReadInt32().ToString());
         //Console::WriteLine(br->ReadInt32().ToString());

      fs->Close( );
   }
   catch (Exception^ e)
   {
      if (dynamic_cast<FileNotFoundException^>(e))
         Console::WriteLine("File '{0}' not found", fileName);
      else
         Console::WriteLine("Exception: ({0})", e);
      return -1;
   }
   return 0;
}


... но он выдает не то, что мне нужно и по одной строке, совсем не те числа:
234417339
1091278168
853450298
1072652777
1503567587
1072017895
1932544722
1081344903
-954215220
-1071506953
-1737824698
1075923624
1860225844
1071492782
-1926941994
1065756451
-636921022
1070643184
880778520
-1074319773
68948893
-1079918038
149155141
-1075467444
98616177
-1075096470
189652504


PM MAIL   Вверх
Sartorius
Дата 10.5.2007, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

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



Цитата

16 столбцов


 интересное у тебя описание структуры...  smile 
PM MAIL ICQ   Вверх
_hunter
Дата 10.5.2007, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



Цитата(ElectroWave @  10.5.2007,  16:01 Найти цитируемый пост)
Как узнать где именно нужно делать переход на другую строку

переход на другую строку нужно делать сразу после того, как закончился текущий елемент структуры.


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
ElectroWave
Дата 10.5.2007, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



я под структурой понял:
1 столбец - тип данных (long)
2 столбец - тип данных (long)
и т.д.
Если не так, поправьте.

Добавлено через 6 минут и 17 секунд
К примеру вот что там находится:
   time        X(север)      Y(восток)        H       Xv(м/c)    Yv(м/c)     Z(м/c)                    
443682.0068  5749901.6916  52511493.5102   825.7089   33.1911   -45.6565    -0.4673   

И какова структура этого файла? Поясните, плз, а то я че-то запутался.
PM MAIL   Вверх
_hunter
Дата 10.5.2007, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



Цитата(ElectroWave @  10.5.2007,  16:30 Найти цитируемый пост)
1 столбец - тип данных (long)

cудя по наличию точки -- это точно не лонг (возможно дабл)

Цитата(ElectroWave @  10.5.2007,  16:30 Найти цитируемый пост)
И какова структура этого файла?

это тебе лучше знать...

только файл это не бинарний... -- прочтые даблы разделенные толи пробелами толи табами. новая запись начинается с новой строки. все...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
ama_kid
Дата 10.5.2007, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

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



ElectroWave, пробегавший рядом со мной телепат подсказал мне, что у тебя не бинарный файл, а... текстовый файл... smile  Элементами которого являются строки. А элементами строк - соответственно текстовые представления чисел типа double (ну или float)... Соответственно, чтобы это все считать, тебе надо считать строку из файла, потом сделать парсинг строки по пробелам (или, возможно, по символам Tab) и преобразовать каждую подстроку в число типа double... К сожалению, телепат убежал слишком быстро, я не успел узнать у него, что же ты из всего этого хочешь получить?  smile  У тебя ведь и так есть текстовый файл с требуемыми значениями, поэтому вопрос 
Цитата
Как можно перегнать эти данные в текстовый файл?
мне кажется непонятным...


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
ElectroWave
Дата 10.5.2007, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Сорри, видимо я ввел Вас в заблуждение, показав конечный результат этой проблемки. Файл изначально бинарный, а уж потом только получают такой вид в текстовом файле:

   time        X(север)      Y(восток)        H       Xv(м/c)    Yv(м/c)     Z(м/c)                    
443682.0068  5749901.6916  52511493.5102   825.7089   33.1911   -45.6565    -0.4673   

Как его получить? Можете примерчик привести, что-то не совсем въезжаю в тему про структуру.  smile 
Еще раз извините что не совсем корректно объяснил проблему. 
PM MAIL   Вверх
_hunter
Дата 10.5.2007, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



ты уже в который раз упоминаеш таинственный бинарный файл таинственной структуры, но так ниразу его и не показал...
насчет чтения структур тут:
http://www.programmersheaven.com/mb/CandCP...eadmessage.aspx
почитай...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
ElectroWave
Дата 10.5.2007, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(_hunter @ 10.5.2007,  19:16)
ты уже в который раз упоминаеш таинственный бинарный файл таинственной структуры, но так ниразу его и не показал...

я бы Вам его показал, но он весит 65 метров, обычно этот файл достигает 300-500 метров. 

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


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



так что ты от нас хочеш?
хоть описание формата предоставь...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
ElectroWave
Дата 11.5.2007, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Мне известно:
1. Файл бинарный с расширением .out;
2. Известно, что содержимое файла при перегоне (как, не известно) его в текст выглядит так:
443682.0068  5749901.6916  52511493.5102   825.7089   33.1911   -45.6565    -0.4673   63.8016    -0.1591     8.9255    -5.7316  0.3471   0.6846  -1.9832  0.0114   0.0054  -0.0076
443682.0118  5749901.8344  52511493.7534   825.7066   33.2009   -45.6545    -0.4604   63.7992    -0.1570     8.9323    -5.7316  0.3341  -1.9753  -0.9557  0.0084   0.0237  -0.0084
... и т.д.

вот все что мне известно.
PM MAIL   Вверх
_hunter
Дата 11.5.2007, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



т.е. ничего не известно...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Sartorius
Дата 11.5.2007, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

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



 Если уверен, что хедера нет, попробуй прочитать float double и long double и посмотри, где будет 443682.0068. Ну а дальше этот тип и читай...
 ЗЫ а вообще, если хочешь что б тебе помогли - выложи бинарник и текстовой вывод, который ему соответствует

Это сообщение отредактировал(а) Sartorius - 11.5.2007, 11:12
PM MAIL ICQ   Вверх
ama_kid
Дата 11.5.2007, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

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



Цитата(Sartorius @  11.5.2007,  11:10 Найти цитируемый пост)
выложи бинарник
Или хотя бы его первые 200 кБ, если уж он весит 60 метров...



--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
Rapalex
Дата 11.5.2007, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 732
Регистрация: 20.1.2006
Где: Украина -> Ник олаев

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



1

Странно като, смотрю на этот код:
Цитата(ElectroWave @  10.5.2007,  16:01 Найти цитируемый пост)
#include "stdafx.h"#using<system.dll>
using namespace System;
using namespace System::IO;

int main()
 {   String^ fileName = "test.out";
   String^ fileName_out = "textfile.txt";

и думаю, ElectroWave, если пишеш на .NET то тебе не в этот раздел.


2

Sartorius, правильно сказал вначале нужно определится с типами в которых у тебя заданы числа.
А потом обявить структору с правильными типам, в правильном порядке. А дальше читай себе на здоровье....


3
Что касается бинарного файла, а ты уверен что это не сериализованиые обекты .нет-а или МФЦ?

Это сообщение отредактировал(а) Rapalex - 11.5.2007, 12:37


--------------------
In vitium ducit culpae fuga.
Желание избежать ошибки вовлекает в другую.
(Horatius)
PM ICQ   Вверх
ElectroWave
Дата 11.5.2007, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо за ответы и советы!   smile 
Думаю разберусь.
PM MAIL   Вверх
Rapalex
Дата 11.5.2007, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 732
Регистрация: 20.1.2006
Где: Украина -> Ник олаев

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



Тогда тему закрой.


--------------------
In vitium ducit culpae fuga.
Желание избежать ошибки вовлекает в другую.
(Horatius)
PM ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




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


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

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