Страница: 1 | 2 |
Вопрос: Замена текста в файле
Добавлено: 22.10.04 18:58
Автор вопроса: Junior
Как на VB заменить в текстовом файле часть строки на другую?
..Вася Пупкин.. надо поменять на ..Вася Петров..
Ответы
Всего ответов: 22
Номер ответа: 1
Автор ответа:
Navigator
ICQ: 177815632
Вопросов: 11
Ответов: 70
Профиль | | #1
Добавлено: 22.10.04 19:27
Именно без загрузки этих данных куда-либо (в текстбокс например), прямо в файле?
Номер ответа: 2
Автор ответа:
Junior
Вопросов: 8
Ответов: 15
Профиль | | #2
Добавлено: 22.10.04 19:32
Прямо в файле. Как данные с файла считать я заню.
Номер ответа: 3
Автор ответа:
Иван
Администратор
ICQ: 147688925
Вопросов: 24
Ответов: 708
Web-сайт:
Профиль | | #3
Добавлено: 22.10.04 20:17
Считай, поменяй и запиши назад измененные данные.
Номер ответа: 4
Автор ответа:
Navigator
ICQ: 177815632
Вопросов: 11
Ответов: 70
Профиль | | #4
Добавлено: 22.10.04 20:19
Файл текстовой, а значит доступ в него последовательный, тоесть нельзя добраться до 10-ой строки минуя 9 предыдущих, затем спокойно закрыть его, заменив в нем то, что нужно...
Тебе все равно придется считывать информацию куда-то, чтобы ее проанализировать. Да и сохранить измененную информацию ты так же сразу не сможешь, ведь открыт-то файл у тебя для чтения с помощью "Input", а сохранять в него надо при помощи "Output или Append". Получается, что никак нельзя сделать так, как ты хочешь.
Хотя, возможно, все возможно Подожди немного, что местные гуру скажут по этому поводу, а я вместе с тобой подожду тоже, самому стало интересно.
Номер ответа: 5
Автор ответа:
Junior
Вопросов: 8
Ответов: 15
Профиль | | #5
Добавлено: 22.10.04 20:33
А как вставить в определенное место файла данные, или мне придется вставлять весь считанный файл или всю строку?
Номер ответа: 6
Автор ответа:
dNW
Вопросов: 30
Ответов: 683
Профиль | | #6
Добавлено: 22.10.04 21:47
Open "C:\1.txt" For Binary Access Read As #1
Dim bf As String
bf = Space$(LOF(1))
Get #1, 1, bf
Close #1
bf = Replace$(bf, "Вася Пупкин", "Вася Петров", , , vbTextCompare)
Open "C:\1.txt" For Output As #1
Print #1, bf
Close #1
End Sub
Номер ответа: 7
Автор ответа:
Navigator
ICQ: 177815632
Вопросов: 11
Ответов: 70
Профиль | | #7
Добавлено: 22.10.04 21:59
Вот в том-то и фишка всей мороки с файлами последовательного доступа, что нельзя читать из него и писать в него одновременно. Чтобы вставить в определенное место информацию надо сначала это место найти (открываешь в режиме Input и считываешь строки пока не найдешь нужную), а так как ты сразу не можешь записать инфу в файл, то тебе придется переоткрыть его в режиме Output или Append для записи со всеми вытекающими последствиями…
Можно сделать так (вариант с 2-мя файлами типа “Через анальное отверстие”):
Открываешь файл №1 из которого будешь читать инфу и искать нужное место.
Открываешь файл №2, в который будешь писать считанную инфу.
Далее делаешь цикл, в котором сначала считывается строка из файла №1 и если она не соответствует нужному месту – пишешь ее в файл №2, опять читаешь из файла №1 и если это нужная строка – меняешь ее на нужный вариант и пишешь в файл №2. Так делаешь пока файл №1 не подойдет к концу, затем закрываешь оба файла и замещаешь файл №1 файлом №2. Вот такой геморрой.
Но есть способ лучше:
сначала считываешь весь текст из файла, например, в TextBox, меняешь в нем все как надо. Затем просто переписываешь получившийся текст из TextBox’a обратно в файл и все… Лично я так работаю с текстовыми файлами. Но вариантов на самом деле много.
Номер ответа: 8
Автор ответа:
Navigator
ICQ: 177815632
Вопросов: 11
Ответов: 70
Профиль | | #8
Добавлено: 22.10.04 22:03
Во! У dNW отличный пример!
Номер ответа: 9
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #9
Добавлено: 22.10.04 22:17
проще взять все считать в переменную, заменить что надо и слить обратно...
И вообще для этого нужно использовать бинарный доступ к файлу, имхо...
Номер ответа: 10
Автор ответа:
Barsik
Разработчик Offline Client
ICQ: 343368641
Вопросов: 17
Ответов: 686
Web-сайт:
Профиль | | #10
Добавлено: 23.10.04 13:23
конечно sne ты прав, лучше юзать через бинарный доступ...
Номер ответа: 11
Автор ответа:
dNW
Вопросов: 30
Ответов: 683
Профиль | | #11
Добавлено: 23.10.04 19:09
Я именно такой код и дал
Номер ответа: 12
Автор ответа:
Junior
Вопросов: 8
Ответов: 15
Профиль | | #12
Добавлено: 25.10.04 12:22
А почему переменная bf получает из файла не его содержимое, а несколько квадратов, которые у меня даже в msgbox не отражаются?
Номер ответа: 13
Автор ответа:
dNW
Вопросов: 30
Ответов: 683
Профиль | | #13
Добавлено: 25.10.04 15:26
Наверно что-то с файлом
Номер ответа: 14
Автор ответа:
Junior
Вопросов: 8
Ответов: 15
Профиль | | #14
Добавлено: 25.10.04 16:11
А какой максимальный размер переменной bf? У меня большооооой файл. Думал, может не обязательно его весь читать.
А в целом все отлично работает, спасибо.
Номер ответа: 15
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #15
Добавлено: 25.10.04 16:33
теоретический лучше бы файлу быть меньше 2Гб, практически - меньше 10-20 Мб, потолок... делее идет нецелевое использование ресурсов Для этого используют FileMapping functions...