Страница: 1 |
Страница: 1 |
Вопрос: Как в VB считать определенную строку из файла?
Добавлено: 09.02.08 12:13
Автор вопроса: Алексей | Web-сайт:
Здравствуйте!
Есть HTML файлы из которых нужно считать определенные строки (скажем, строку 86 или 92). Как это сделать, чтобы не открывать весь файл, а получить доступ именно к этим строкам? Да, и как потом сохранить измененные строки в этот же файл, опять же без перечтения всего файла? Заранее, спасибо!
Ответы
Всего ответов: 13
Номер ответа: 1
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #1
Добавлено: 09.02.08 21:20
А как программа узнает где начинается 86 строка? Я думаю до 92 строки придется построчно считывать файл.. наверное...
Номер ответа: 2
Автор ответа:
nguufxm6bo
Вопросов: 0
Ответов: 27
Профиль | | #2
Добавлено: 10.02.08 00:18
Не открывая файл - не получится.
Открыть файл и прочитать конкретную строку - для этого надо знать смещение первого символа строки и ее длину.
Номер ответа: 3
Автор ответа:
Алексей
ICQ: 282466278
Вопросов: 3
Ответов: 11
Web-сайт:
Профиль | | #3
Добавлено: 10.02.08 11:35
Наверное, я не так объяснил. Просто для меня вся эта процедура выглядит следующим образом:
OPEN "Filename" FOR INPUT AS #1
LINE INPUT #1, TxtStr01
LINE INPUT #1, TxtStr02
LINE INPUT #1, TxtStr03
... и так далее.
Неужели нет более простого способа достигнуть сразу нужной строки?
Номер ответа: 4
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #4
Добавлено: 10.02.08 14:32
Как программа узнает, ГДЕ начинается нужная строка, если не будет построчно считывать файл? Если сделать строки в файле одинаковой длины, то можно будет загружать определенные байты
Номер ответа: 5
Автор ответа:
Алексей
ICQ: 282466278
Вопросов: 3
Ответов: 11
Web-сайт:
Профиль | | #5
Добавлено: 10.02.08 14:47
Спасибо на этом!
Номер ответа: 6
Автор ответа:
AleXProg
Вопросов: 10
Ответов: 29
Профиль | | #6
Добавлено: 11.02.08 09:15
А если попробовать так:
Dim St as String 'Строка
Dim N as Integer 'Номер нужной строки
For i = 1 to N
Input #1, St
next i
Номер ответа: 7
Автор ответа:
Алексей
ICQ: 282466278
Вопросов: 3
Ответов: 11
Web-сайт:
Профиль | | #7
Добавлено: 11.02.08 09:32
To AleXProg: а можно пококретнее? Чего-то не догоню. Конкретный пример.
Номер ответа: 8
Автор ответа:
AleXProg
Вопросов: 10
Ответов: 29
Профиль | | #8
Добавлено: 11.02.08 09:43
Private Sub Form_Load()
Dim St As String
Dim N As Integer
N = 92 'Или номер нужной строки
OPEN "Filename" FOR INPUT AS #1
For i = 1 to N
LINE INPUT #1, St
Next i
'В переменной St записана нужная строка
Close #1
End Sub
Номер ответа: 9
Автор ответа:
Алексей
ICQ: 282466278
Вопросов: 3
Ответов: 11
Web-сайт:
Профиль | | #9
Добавлено: 11.02.08 09:48
To AleXProg: большое спасибо! Попробовал, и все окей! Только еще одна проблема осталась. Просто есть файлы, в которых нужно заменять переодически строки, а строки в каждом файле разбросаны по разному и сохранять только измененные строки, чтобы структура оставалась той же. Например: считать и заменить строку номер 10 на что-то свое и сохранить изменения. Буду тебе очень благодарен, если сможешь прислать небольшой пример такой проги!
Номер ответа: 10
Автор ответа:
AleXProg
Вопросов: 10
Ответов: 29
Профиль | | #10
Добавлено: 13.02.08 08:55
Dim StM(1 To 1000000) As String, St As String, N As Integer, NewSt As String, IsR As Boolean, Sh As Long
Private Sub Command1_Click()
N = 10 'Íîìåð çàìåíÿåìîé ñòðîêè
NewSt = "New String" 'Íîâàÿ ñòðîêà
IsR = True
Sh = 0
On Error GoTo 1
Open "C:\1.txt" For Input As #1
Do
DoEvents
Sh = Sh + 1
Line Input #1, StM(Sh)
Loop While IsR
1
Close #1
Open "C:\1.txt" For Output As 1
For i = 1 To Sh
If i = N Then
Print #1, NewSt
Else
Print #1, StM(i)
End If
Next i
Close #1
End Sub
Возможны глюки! Но у меня работает. Возможно, слишком мудрёно, можешь попробовать сам подъисправить
Номер ответа: 11
Автор ответа:
AleXProg
Вопросов: 10
Ответов: 29
Профиль | | #11
Добавлено: 13.02.08 09:00
N = 10 - это номер заменяемой строки;
NewSt - это заменяемая строка;
Удачи!
Номер ответа: 12
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #12
Добавлено: 13.02.08 14:16
Можно предварительно рассчитать смещение каждой стркои в файле и отдельно сохранить.
Разумеется, при изменнеии файла каждый раз нужно будет эту таблицу перерасчитывать, зато вот скорость получения строки по ее индексу возрастет во много раз.
Номер ответа: 13
Автор ответа:
Алексей
ICQ: 282466278
Вопросов: 3
Ответов: 11
Web-сайт:
Профиль | | #13
Добавлено: 16.02.08 11:19
Спасибо всем за помощь!