Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Blockwrite - как работает?

15K
31 октября 2006 года
vania
21 / / 23.10.2006
Скажите, как работает процедура blockwrite?
Blockwrite(f,buf,numblock,realnum).

Допустим, нужно посчитать, сколько раз в файле повторяются символы от 0 до 255, как это сделать, чтобы комп не зависал, т.е. используя минимум ресурсов, если осуществлять просто перебор, то начиная с файлов в несколько килобайт это уже затруднительно.
547
01 ноября 2006 года
Hydra
488 / / 20.06.2006
А известна ли тебе тайна кнопки F1 в дельфи... Наводишь на слово BlockWrite и.... О чудо! появиться описание данной процедуры.
Хотя для твоей задачи скорее всего BlockRead полезней будет. Читаешь кусок файла в символьный массив и считаешь количество символов.
Читашь до тех пор, пока файл не кончится (об этом BlockRead и скажет).
15K
01 ноября 2006 года
vania
21 / / 23.10.2006
Что за кнопка F1 я знаю, но вот дальше обычно начинается тайна.
Ну, это, так сказать, общие фразы.

Что значит число считываемых блоков.
Я считывал по одному блоку и считал количество символов, но это работает на файлах до нескольких килобайт, а дальше зависает.
261
01 ноября 2006 года
ahilles
1.5K / / 03.11.2005
Blockwrite(f,buf,numblock,realnum).
f идентификатор нетипизированного файла var f:file;
buf буфер
numblock сколько надо записать
realnum сколько записано
но лучше пользоваться API функцией WriteFile
15K
01 ноября 2006 года
vania
21 / / 23.10.2006
Ну, хорошо.

У меня есть считанный файл ( b:array[0..2047] of byte) и 256 символов: от 0 до 255. Мне нужно посчитать сколько раз повторяется каждый из символов в файле.
Я думаю сделать это с помощью цикла for,

repeat

blockread(fin,b,sizeof(b),countr);

until (countr=0) or (countr<>countwr); - {это из справки по Delphi}

вот так файл считывается, куда тут можно цикл for вставить?
547
02 ноября 2006 года
Hydra
488 / / 20.06.2006
Тебе типа такого надо?
 
Код:
var
  c:array[byte] of char;
....
repeat
blockread(fin,b,sizeof(b),countr);
for i:=0 to countr do
 inc(c[b]);
until (countr=0) or (countr<>sizeof(b));

В результате c - количество символов с кодом i в массиве b.
15K
02 ноября 2006 года
vania
21 / / 23.10.2006
Да, такое.
Только объясни что за команда inc?
547
03 ноября 2006 года
Hydra
488 / / 20.06.2006
то же, что и c[b]=c[b]+1
инкремент т.е.
547
03 ноября 2006 года
Hydra
488 / / 20.06.2006
то же, что и c[b]=c[b]+1
инкремент т.е.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог