Russian Qt Forum
Ноябрь 23, 2024, 21:24 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: ваши варианты решения задачи  (Прочитано 8036 раз)
BuRn
Гость
« : Ноябрь 24, 2011, 22:07 »

лично у меня даже мысли нет
Задача такая, есть массив , двумерный, колличество строк и столбцов мы не знаем, пишем его в бинарный файл, после записи нужно как-то прочитать, грубо говоря восстановить в такой же динамический массив, тут проблема не известно под сколько элементов выделять память
Записан
BRE
Гость
« Ответ #1 : Ноябрь 24, 2011, 22:08 »

А как мы его пишем в файл?
Записан
BuRn
Гость
« Ответ #2 : Ноябрь 24, 2011, 22:13 »

до NULL
Код:
for(int i=0;p[i]!=NULL;i++)
     for(int j=0;p[i][j]!=NULL;j++)
Записан
BuRn
Гость
« Ответ #3 : Ноябрь 24, 2011, 22:14 »

думаю может попробовать так, читать. если цифра , переопределять память выделив на n+1 элемент и писать уже туда
Записан
BRE
Гость
« Ответ #4 : Ноябрь 24, 2011, 22:16 »

до NULL
Значит мы можем посчитать сколько в нем строк и столбцов. Улыбающийся
Мы можем оставить место в файле перед массивом и сохранить точное количество строк/столбцов после сохранения массива.
Записан
BuRn
Гость
« Ответ #5 : Ноябрь 24, 2011, 22:17 »

без подсчета тупым прогоном по всему массиву до нул
Записан
BRE
Гость
« Ответ #6 : Ноябрь 24, 2011, 22:18 »

без подсчета тупым прогоном по всему массиву до нул
Ну да, считать во время самого сохранения, потом сделать seek в нужное место файла и сохранить полученные значения.
Записан
Rem Norton
Гость
« Ответ #7 : Ноябрь 25, 2011, 11:06 »

Заголовок файлу нужен, с указанием количества строк и столбцов. Реализацию сделать?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #8 : Ноябрь 25, 2011, 11:17 »

Ну да, считать во время самого сохранения, потом сделать seek в нужное место файла и сохранить полученные значения.
Если так то лучше делать общий механизм (IFF). А в данном случае проще и быстрее прогон для определения кол-ва элементов. Хотя неизвестно сколько будет таких случаев
Записан
BRE
Гость
« Ответ #9 : Ноябрь 25, 2011, 11:33 »

Если так то лучше делать общий механизм (IFF).
Наверное еще лучше так никогда не делать. Улыбающийся
А что скрывается за красивым сокращением IFF?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #10 : Ноябрь 25, 2011, 11:41 »

Как вариант, использовать "магическое число" для разделения строк.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #11 : Ноябрь 25, 2011, 11:42 »

А что скрывается за красивым сокращением IFF?
А я уже и не помню аббревиатуру Улыбающийся
В терминах Qt примерно такой scoped
Код
C++ (Qt)
struct CBackTrack {
CBackTrack( unsigned int tagID, QDataStream & stream ) : mStream(stream)
{
  mStream << tagID;
  mSavedPos = mStream.device()->pos();
  mStream << (int) 0;
}
 
~CBackTrack( void )
 {
   qint64 pos = mStream.device()->pos();
   mStream.device()->seek(mSavedPos);
   mStream << unsigned int (pos - mSavedPos);
   mStream.device()->seek(pos);
 }
 
QDataStream & mStream;
qint64 mSavedPos;
};
 
Запись
Код
C++ (Qt)
CBackTrack btArr('ARRA', stream);
for(int i=0;p[i]!=NULL;i++) {
    CBackTrack btRow('ROW1', stream);
    for(int j=0;p[i][j]!=NULL;j++)
      ....
}
 
Любые данные могут быть записаны в произвольном порядке, при чтении могут быть пропущены
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #12 : Ноябрь 25, 2011, 13:47 »

Как вариант, использовать "магическое число" для разделения строк.
я тоже об этом подумал, но должны быть гарантии, что такое число не может быть валидным во входных данных
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #13 : Ноябрь 25, 2011, 13:50 »

Как вариант, использовать "магическое число" для разделения строк.
я тоже об этом подумал, но должны быть гарантии, что такое число не может быть валидным во входных данных
Использовать последовательность. Улыбающийся Причем нужно будет только первое вхождение, чтобы узнать количество столбцов.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Bepec
Гость
« Ответ #14 : Ноябрь 25, 2011, 13:57 »

Как вариант использовать число разделитель вместе со стаффингом. (заменой этого числа последовательность других.)

Пример приведу только байтовый, другого увы нету.

«A1h» должен быть заменен на последовательность «BDh DCh», байт «BDh» – на последовательность «DBh DDh».

Соответственно если проникнуться этой мыслью (а это непросто), то в записанных данных строк этого типа никогда не будет Улыбающийся
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.191 секунд. Запросов: 23.