Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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-сайт: www.vbnet.ru
 Профиль | | #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
Private Sub Form_Load()
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-сайт: hw.t-k.ru
 Профиль | | #9
Добавлено: 22.10.04 22:17
проще взять все считать в переменную, заменить что надо и слить обратно...

И вообще для этого нужно использовать бинарный доступ к файлу, имхо...

Ответить

Номер ответа: 10
Автор ответа:
 Barsik



Разработчик Offline Client

ICQ: 343368641 

Вопросов: 17
Ответов: 686
 Web-сайт: barsik.newmail.ru
 Профиль | | #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-сайт: hw.t-k.ru
 Профиль | | #15
Добавлено: 25.10.04 16:33
теоретический лучше бы файлу быть меньше 2Гб, практически - меньше 10-20 Мб, потолок... делее идет нецелевое использование ресурсов ;) Для этого используют FileMapping functions...

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам