Eugene писал(а):Можно ли сделать это одновременно открывая файл for Random?
нет, если у тебя строки разной длины, даже если у тебя были строки одинаковой длины, то при дописывании, длина записей изменится
Eugene писал(а):Не могу понять как работает ф-я Get
функция Get используется для файлов
с произвольным доступом.. что это такое, и как это отличить от бинарных и последовательных файлов?
В последовательном файле вся информация хранится в одном длинном массиве, например ты набрал в три строки
Вася
Петя
Коля
В файле они будут лежать так
НАЧАЛО ФАЙЛАВася
/nПетя
/nКоля/n
КОНЕЦ ФАЙЛА
"/n" - непечат. символ(один) перехода на новую строку, он же символ возврата каретки (код ANSI - 13) = Chr(13) = vbCRlf
Последовательные файлы так наз потому, что их записи всегда читаются последовательно от начала файла.
Двоичные файлы- это тоже последовательные, но там хранится не текст, а неинформативная последовательность байтов ( программы в том чилсле, их плюс - быстрее читаются, меньше памяти жрут)
Файлы с произвольным доступом- сохраняет записи ФИКСИРОВАННОГО РАЗМЕРА. Размер каждой записи определяется в момент создания файла. Нумеруются последовательно начиная с нуля. НЕ используются разделители. Плюс в том, что можно обратиться сразу к 1001 записи, минуя 1000 до этого. Минус - Фиксированная ширина поля:
Последовательный файл, который мы сохранили в блокноте
Вася/nПетя/nМарина/nКоля
Файл открыт для произвольного доступа с шириной = 5
Вася/n
Петя/n
Марин
а/nКол
я
Файл открыт для произвольного доступа с шириной = 4
Вася
/nПет
я/nМа
рина
/nКоля
Файл открыт для произвольного доступа с шириной = 6 ( Чтобы Марина влезла)
Вася/nП
етя/nМа //Ну почти влезла
рина/nК
оля
Чувствуешь разницу?
Маза использовать произвольный доступ в хранении структур ( классов) которые будут ФИКСИРОВАННОЙ Длины или используй заполнители лишнего, например пробелами
Как работает Get:
Открыли с длиной = 5
- Код: Выделить всё
Dim str$
Dim fn%
fn=FreeFile()
Open "cpp.txt" For RANDOM As #fn LEN=5
Вася/n
Петя/n
Марин
а/nКол
я
- Код: Выделить всё
Get #fn, 2, str
Если посимвольно перебрать строку str, и распечатать ANSI коды, то мы получим
[код буквы П] // мне влом было смотреть, для этого есть ф-я Asc()
[код буквы е]
[код буквы т]
[код буквы я]
[код 13]
Да, курсор файлового указатеря теперь находится возле строки 2+1=3 строки
А теперь что тебе нужно в реале
1. Купить учебник по VBA
2. Открыть раздел Доступ к файлам
3. Прочитать ВСЕ
После этого код должен получиться что-то вроде этого
- Код: Выделить всё
Dim str$
Dim fn1%,fn2
fn1=FreeFile()
Open "First.txt" For input As #fn
fn2=FreeFile()
Open "Second.txt" For Output As #fn
// посимвольный цикл
Do while not EOF(fn1)
str=Input 1, fn1
if str <> Chr(13) then
print #fn2, str
else
Print #fn2,"что-то еще" ;
// ";" - значит печатать "что-то еще " и добавить /n
endif
wend
close #fn1,#fn2
Если надо чтобы и second.txt заменил first.txt, то в том же учебнике, ты найдешь как удалить файл и потом переименовать
Приятного дня!