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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.10.2020, 19:21   #11
cb251132
Пользователь
 
Регистрация: 29.06.2008
Сообщений: 23
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
ну почему же. Вполне можно любому числу выделить одинаковое число позиций.
Заполнять незначащие позиции можно как пробелом, так и 0.
Код:
9
 9
09
три варианта записи одного и того же числа.
Код:
format('%.8d %8d', [n, n*20]); // разный вывод двух чисел НО каждое из которых займет ровно 8 позиций.
кроме того любую строку можно дополнять пробелами ПОСЛЕ вывода всех чисел.
Код:
s --строка с числами
spacestr -- строка с пробелами желаемой длины строки вывода
r:=copy(s +spacestr, 1, length(spacestr)); //строка для вывода
Согласен. Этот вариант рабочий. Смысл будет его рассмотреть в том в случае, когда удастся разобраться со способом выделения строки соразмерно занимаемому выборочному пространству. Но пока не удается, даже с учетом приведения строк к одинаковой длине.

Последний раз редактировалось cb251132; 04.10.2020 в 20:27.
cb251132 вне форума Ответить с цитированием
Старый 05.10.2020, 03:19   #12
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,869
По умолчанию

Цитата:
Сообщение от cb251132 Посмотреть сообщение
К сожалению, да. Но это такой медленный способ, в сравнении с молниеносной обработкой Tfilestream, что просто одно расстройство.
Попробуйте заменить текстовые файлы на не текстовые.
northener вне форума Ответить с цитированием
Старый 06.10.2020, 09:40   #13
cb251132
Пользователь
 
Регистрация: 29.06.2008
Сообщений: 23
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
Попробуйте заменить текстовые файлы на не текстовые.
Объем данных ведь это не изменит, но, наверное, позволит реализовать задачу иным способом. Можете конкретизировать свою идею?
cb251132 вне форума Ответить с цитированием
Старый 06.10.2020, 11:40   #14
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

cb251132 Нечего клянчить код. Никто его за вас его писать не будет. Тут работы на 1 час. Но кто же будет просто так час времени тратить?

Открываете файл как бинарный последовательно читаете блоками по 256 кбайт. В каждом блоке находите код новой строки он состоит из нескольких байт так что надо обработать границу корректно. Переводите смещение относительно блока в смещение от начала файла FileOffset=N*BlockSize+BlockOffset
Запоминаете эти результаты в список. Затем используя TFilestream.seek() читаете нужные строки.

Что касается метода предложенного northener он чутка по проще. Используем F:Text; вычитываем строки дополняем нулями SetLength(Str,40); и записываем при помощи Filestream.WriteBuffer(str[1],40*SizeOf(Char)); в файл.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 06.10.2020, 13:28   #15
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

А эти числа обязательно должны быть в текcтовом файле или можно в бинарном?
BLACK_RAIN вне форума Ответить с цитированием
Старый 06.10.2020, 14:04   #16
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

текстовый - нетекстовый
Цитата:
Объем данных ведь это не изменит,
Цитата:
(величина постоянная 8 шт. в любой строке) и сочетаний однозначных, двузначных чисел. Одинаковый размер обеспечить невозможно.
двузначные числа в двоичном коде умещаются в байт.
восемь максимально двузначных чисел займут при правильной организации 8 байт.
Цитата:
Одна строка занимает минимум 17 байт, максимум 26 байт
Цитата:
так как состоит из сочетания символов табуляции служащих разделителем
а нужны ли они будут ЕСЛИ все числа имеют свое фиксированное место.

Цитата:
но, наверное, позволит реализовать задачу иным способом.
способ тот же. фиксированный размер строки позволяет рассчитать позицию любой строки по ее номеру. и получить быстрый доступ к ней.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 06.10.2020, 14:12   #17
cb251132
Пользователь
 
Регистрация: 29.06.2008
Сообщений: 23
По умолчанию

evg_m,

Цитата:
Сообщение от evg_m Посмотреть сообщение
текстовый - нетекстовый

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


а нужны ли они будут ЕСЛИ все числа имеют свое фиксированное место.


способ тот же. фиксированный размер строки позволяет рассчитать позицию любой строки по ее номеру. и получить быстрый доступ к ней.
Для решения этой задачи недостаточно познаний. Обойдусь найденным вариантом решения через TextFile. Всем спасибо.
cb251132 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
аналог TFileStream JUDAS C++ Builder 5 14.06.2015 20:25
TFileStream Baburek C++ Builder 3 04.07.2013 10:13
проблемы с TFileStream andrey4623 Общие вопросы Delphi 9 01.11.2007 20:44
TFilestream UnD)eaD)Snake Win Api 1 27.09.2007 21:22