Алгоритм для правки файла

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
FreiDer
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 08.10.2004 (Пт) 15:36
Откуда: Электрогорск

Алгоритм для правки файла

Сообщение FreiDer » 14.02.2005 (Пн) 17:00

Имеем:
Текстовик, в котором (неизвестно где) есть определённая строка, которую нужнго исправить. Я это делаю следующим образом: считываю построчно весь файл в массив, организовываю поиск и заменяю нужный элемент.
Вопрос:
помоему этот метод несколько "тяжеловат", особенно для больших файлов. Нет ли чего попроще (покрасивее :wink: )?
Не флуда ради...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 14.02.2005 (Пн) 17:02

Строка содержит символы перевода строки?
Если нет, то лучше всего поиск осуществлять внутри Do ... Line Input ... Loop, а вывод осуществлять во временный файл. После отработки процедуры исходный файл затирается, а новый переименовывается.
Lasciate ogni speranza, voi ch'entrate.

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Сообщение codemaster » 14.02.2005 (Пн) 17:16

//<-
Mit freundlichen Grüßen
//->

FreiDer
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 08.10.2004 (Пт) 15:36
Откуда: Электрогорск

Сообщение FreiDer » 14.02.2005 (Пн) 19:14

2 alibek - символ "перегона коретки" есть...

2 codemaster - мерсибо за полезную ссылочку :-)
Не флуда ради...

Qubicz
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 16.10.2004 (Сб) 20:21
Откуда: Санкт-Петербург

Сообщение Qubicz » 14.02.2005 (Пн) 23:19

Код: Выделить всё
Dim st$, fi$(), n As Long
Open "c:\11.txt" For Binary As #1
st = Input(LOF(1), #1)
Close #1
fi = Split(st, vbCrLf)
MsgBox "6 строка:" & vbCrLf & fi(5)
'Исправление в нужной строке
fi(5)="<CENSORED>"
'запись файла
Open "c:\my.txt" For Output As #1
For n = 0 To UBound(fi)
Print #1, fi(n)
Next
Close #1

FreiDer
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 08.10.2004 (Пт) 15:36
Откуда: Электрогорск

Сообщение FreiDer » 15.02.2005 (Вт) 14:56

Всё спасибки так оно попроще будет!
Не флуда ради...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 15.02.2005 (Вт) 15:03

И чем оно отличается от первого варианта?
Lasciate ogni speranza, voi ch'entrate.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 15.02.2005 (Вт) 15:04

Вдобавок, этот код будет добавлять лишние два байта в конец файла.
Lasciate ogni speranza, voi ch'entrate.

Qubicz
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 16.10.2004 (Сб) 20:21
Откуда: Санкт-Петербург

Сообщение Qubicz » 16.02.2005 (Ср) 9:29

Ну если так мешает vbCrLf в конце тогда:
Код: Выделить всё
Dim st$, fi$(), n As Long
Open "c:\11.txt" For Binary As #1
st = Input(LOF(1), #1)
Close #1
fi = Split(st, vbCrLf)
MsgBox "6 строка:" & vbCrLf & fi(5)
'Исправление в нужной строке
fi(5) = "<CENSORED>"
'запись файла
Open "c:\my.txt" For Output As #1
For n = 0 To UBound(fi) - 1
Print #1, fi(n)
Next
Print #1, fi(n);
Close #1

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 16.02.2005 (Ср) 9:35

Дело не в лишнем vbCrLf, а в том, что этот код подвесит (или повесит) машину при загрузке 500-600 мегабайтного файла.
Lasciate ogni speranza, voi ch'entrate.

Qubicz
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 16.10.2004 (Сб) 20:21
Откуда: Санкт-Петербург

Сообщение Qubicz » 16.02.2005 (Ср) 14:26

В binary можно по частям загрузить. Выход?
Ну и наконец про 500-600 метров никто не спрашивал. fso еще есть


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, Majestic-12 [Bot], Yandex-бот и гости: 143

    TopList