Страницы: 1
RSS
Работа с текстовыми файлами в режиме прямого доступа, Функции ввода-вывода низкого уровня
 
Доброго здоровья!

Познакомился с этой темой в принципе давно, читая книгу Джона Уокенбаха, но поверхностно. За последнее время здесь было несколько тем по работе с текстовыми файлами. Одна из них «Сохранение файла с нужным разделителем» набрала ~ 30000 просмотров т.е пользователей интересует вопрос работы с текстовыми файлами. Я знаю, что с ними можно работать и на языке VBScript. С нового года стал изучать VBScript, но пришлось отвлечься и попробовать до конца разобраться с работой в режиме прямого доступа. Предполагаю, что принципы работы одинаковые (только операторы, функции разные) поэтому потом будет легче разбираться с VBScript. К великому моему сожалению найти  статьи, где все разложено по полочкам, мне не удалось. В книге Джона тоже маловато написано. Здесь ничего не нашел. На сайте Дмитрия Щербакова в разделе хитрости нашел и бегло прочитал несколько статей (некоторые  тонкости хорошо обьяснены), но по вопросу этой темы статья скудная. Нашел пару подходящих статей, и то в них есть некоторые противоречия. Строго следуя завещаниям великого Ленина,  исходя из лозунга «Учиться, учиться и ещё раз учиться» стараюсь разобраться, но в связи с тем, что не являюсь «профи» остались некоторые вопросы. Очень прошу помочь начинающему программисту разобраться, и ответить на вопросы изложенные ниже.

Есть 5 режимов работы Input, Output, Append, Binary, Random. Первые три объединяются в группу Sequential. В книге Джона написано, что для VBA интерес представляет только режимы последовательного доступа. С чем я не совсем согласен. Думаю, что бинарный режим тоже нужен, в определенных случаях. Больше всего проблем в изучении вызвал произвольный режим.

1 Во первых это связано с тем, что не знаю, что такое записи (определение) Или понятие записи в разных ситуациях разные понятия? ( Часто встречаю это понятие в статьях)
2 Ключевое слово Len в команде Open используется только в режиме Random?
3 Если мы не знаем длину записи, то не сможем открыть в режиме Random,  файл  записанный в режиме Random?
4 Вроде разобрался как заменить определенные символы в файле, увеличить размер файла не переписывая в другой, а вот как обрезать например конец файла (несколько символов) без перезаписи файла (т.е. создания другого файла меньшего размера) так и не понял. Или это невозможно в этих режимах?
5 Почему так редко применяют эти режимы для работы с текстовыми файлами? (Есть какие то ограничения например: нельзя работать с сетевыми дисками, маленькая скорость считывания или что-нибудь еще)
6 Все ли верно написано в тексте ниже:

Функции ввода-вывода низкого уровня (прямого доступа) осуществляют обмен с файлами или периферийными устройствами путем прямого обращения к соответствующим функциям операционной системы (системным вызовам). Отличительные особенности средств прямого доступа к файлам следующие.
1. Они не предоставляют возможности буферизации информации при пересылке.
2 Они не обеспечивают преобразования данных из внутреннего машинного представления в текстовый формат.
3 Они дают возможность перемещать указатель текущей позиции в потоке на нужный байт.
4 При низкоуровневом открытии файла с ним связывается файловый дескриптор. Дескриптор является целым значением, характеризующим размещение информации об открытом файле во внутренних таблицах операционной системы. Дескриптор используется при последующих операциях с файлом.
 
А разве это не тематический форум? Или ветка не та? )
 
У вас много вопросов, вам нужно поднимать уровень матчасти, начинать с бызы. База это WinAPI: CreateFile + ReadFile, остальное это обертки над этими функциями.
Сомневаюсь что vba может отключать кеширование файловой системы, поэтому ваше утверждение о прямом доступе к файлам ошибочно. Работаете вы с кешем.
Когда-то я тоже хотел максимально прокачать скорость работы с файлами.
Кое-что получилось, но это не VBA.
Изменено: bedvit - 04.02.2022 12:07:56
«Бритва Оккама» или «Принцип Калашникова»?
 
Здравствуйте bedvit Спасибо за ответ. Знаю, что надо матчасть учить. Просто не знаю какую книгу для этого лучше почитать, чтобы быстро «врубиться». Ведь очень важно например для автора книги, не только знать излагаемый материал, но и способность доходчиво донести эти знания другим. (По хорошему этой способностью должны обладать все учителя) Сейчас стал понимать, что Джон Уокенбах, кое где не совсем точен, а когда–то я по ней учился потому что не было больше ничего и доступа в интернет нормального не было. И сейчас тяжело искать информацию, если сам ничего не понимаешь. Пишут все кому не лень и  часто откровенную чушь. Когда искал инфо по этой теме сайтов 30 пересмотрел (может это и немного), но только 2 статьи выбрал и сохранил у себя.
После 6 вопроса в сообщении №1 это скопировано с какой - то лекции по программированию. Мне показалось что там в принципе правильно написано поэтому сохранил этот кусок у себя в файле.
 
Считаю что лучшее обучение - это практика. До решений выложенных мною выше, я тоже мало что реально знал на низком уровне. Потом частями узнавал, складывал пазл - из практики, делая инструменты, гугля смежные темы.
Изменено: bedvit - 04.02.2022 17:22:29
«Бритва Оккама» или «Принцип Калашникова»?
 
Язык VBScript является аналогом VBA, значительно урезанным по возможностям, в первую очередь, из-за отсутствия типизации переменных и невозможности обращения к Windows API.
На часть Ваших вопросов есть ответ в описании оператора Open.
За 25 лет работы с VBA Excel я не припомню случаев, когда бы понадобился режим Random (правда, я занимаюсь экономическими задачами). Режимом Binary пользовался редко, в основном, для задач типа "Определить, открыт ли кем-нибудь файл на сетевом ресурсе".

При работе с (текстовыми) файлами "родными" методами всегда надо учитывать ограничения, описанные в п. 3.4, 3.5 этой темы. С моей точки зрения, оптимальный вариант - читать и писать файлы целиком (или крупными кусками) с помощью методов Adodb.Stream.
Изменено: sokol92 - 05.02.2022 18:39:21
Владимир
 
sokol92 Спасибо за ответ. Да я путаюсь  пока в терминах. Вернее было говорить не о языке VBScript, а о изучении Объектов WSH. В первой вашей ссылке действительно есть некоторые ответы, значит  плохо умею искать в интернете. Согласен для VBA режим Random не актуален, можно не забивать им голову.  Вашу тему по второй ссылке, я даже у себя на компе сохранил, но видимо первый раз не совсем внимательно прочитал. Перечитал еще раз.

Благодарю еще раз за ответы sokol92 и  bedvit. Вопросов стало меньше.
 
Лучший сайт по этой тематике (на мой взгляд).
Владимир
Страницы: 1
Наверх