Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.10.2010, 00:09   #1
Jor1k
Пользователь
 
Регистрация: 27.10.2010
Сообщений: 14
По умолчанию запись динамического массива в файловый поток

Подскажите, пожалуйста, как правильно записать динамический массив в поток Tfilestream?
делаю так
Код:
type
TResArray = array of array of real;
var
FileStream:TFilestream
Res: TResArray;
...
FileStream:=TFileStream.Create('Text.txt',fmCreate);
FileStream.Write(Res,sizeof(real)*(Steps+1)*(Num+1));
FileStream.Free;
в файле либо пусто, либо кривозябры, что не так?

Последний раз редактировалось Jor1k; 30.10.2010 в 00:13.
Jor1k вне форума Ответить с цитированием
Старый 30.10.2010, 00:19   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

начнем с того что вы текста там не увидите.
а писать так
FieStream.Write(Res[0],sizeof(Res[0])*Length(Res));
перед этим советую еще сохранить длину массива.

вообще я писал уже как сохранять массивы.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 30.10.2010, 00:26   #3
Jor1k
Пользователь
 
Регистрация: 27.10.2010
Сообщений: 14
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
начнем с того что вы текста там не увидите.
записал как вы сказали, но в файле кривозябры типо: »гШ™гЁxгxWгH6ггиув« ги0оиа.к ¤ф

разве так и должно быть? как тогда мне вывести цифры))

Последний раз редактировалось Jor1k; 30.10.2010 в 00:41.
Jor1k вне форума Ответить с цитированием
Старый 30.10.2010, 01:07   #4
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Цитата:
разве так и должно быть?
Да. Так и должно быть... Тип данных real - это 4/6/8 байтов... Блокнот скорее всего показывает в виде ASCII - каждый символ ровно 1 байт...
Цитата:
как тогда мне вывести цифры))
Смотря для чего именно вам динамический массив... Может заменить real скажем на массив байт и хранить там строку? Или Res участвует в каких-то вычислениях?

А TFileStream вам только для записи в файл? Может тогда сохранять по старинке - по одному числу через AssignFile/BlockWrite?
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 30.10.2010, 01:12   #5
Jor1k
Пользователь
 
Регистрация: 27.10.2010
Сообщений: 14
По умолчанию

мне нужны именно цифры,т.к. это матрица решения системы Ду. и главное, чтоб процесс записи занимал минимальное время и ресурсы. Спасибо за совет.
Jor1k вне форума Ответить с цитированием
Старый 30.10.2010, 01:19   #6
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Так цифры или числа?

Цитата:
это матрица решения системы Ду
Хм... То есть вам нужно чтобы в программе (в массиве) были числа, а в файле обязательно текст?
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 30.10.2010, 01:24   #7
Jor1k
Пользователь
 
Регистрация: 27.10.2010
Сообщений: 14
По умолчанию

Цитата:
Сообщение от DomiNick Посмотреть сообщение
Так цифры или числа?
В массиве цифры реал, а текстовый файл отражать должен то что было в массиве, а не кривозябры. Из текстового файла будет информация считываться в стринггрид
Jor1k вне форума Ответить с цитированием
Старый 30.10.2010, 01:37   #8
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Цитата:
текстовый файл отражать должен то что было в массиве, а не кривозябры
Хм... Ну тогда наверное придётся переводить каждый элемент массива в текст, отдельно...
Цитата:
Из текстового файла будет информация считываться в стринггрид
Почему тогда сразу в него не запихивать числа? Или это будет считывать чужая программа?
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 30.10.2010, 01:49   #9
Jor1k
Пользователь
 
Регистрация: 27.10.2010
Сообщений: 14
По умолчанию

если менее 100.000 *7 элементов. тогда нормально получается, если больше то грузится ореративная память, поэтому хочется разбить вычисления на блоки, каждый блок записывать на диск. Оперативка по идее разгрузится. При 10 млн шагов около 2 Гб занимает массив
Jor1k вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
файловый поток. Открыть\создать бинарник Darth.Vader Общие вопросы C/C++ 16 29.12.2009 22:04
Освобождение динамического массива? VintProg Общие вопросы Delphi 15 28.08.2009 10:41
OpenDialog и файловый поток. (*_*) Общие вопросы C/C++ 1 03.06.2009 22:44
Удаление динамического массива Сергей089 Общие вопросы C/C++ 3 08.03.2009 13:13