Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / удаление, замена строк / 8 сообщений из 8, страница 1 из 1
18.10.2007, 13:31
    #34877834
gar
gar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
удаление, замена строк
мне нужно удалить строку если длина строки < 2 и есть символ
нашел в инете код (см ниже), работает, но очень долго ~6мин на 2Мб текстовом файле.
вопрос - можно ли както ускорить выполнение, если я точно знаю что символ находится в предпоследней строке. в последней vbCrLf.
как быстро перейти на предпоследнюю строку проверить и если удовл условию удалить строку.



Dim fso, a, f, retstring, retstream
Const ForReading = 1, ForWriting = 2
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFile("d:\config.sys")
Set a = f.OpenAsTextStream(ForReading, False)
Do While a.AtEndOfStream <> True
retstring = a.ReadLine
If retstring Like "files*" Then
retstring = "fileshigh=200"
End If
retstream = retstream & retstring & vbCrLf
Loop
a.Close
Set a = f.OpenAsTextStream(ForWriting, False)
a.Write retstream
a.Close
...
Рейтинг: 0 / 0
18.10.2007, 15:22
    #34878342
klen_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
удаление, замена строк
garкак быстро перейти на предпоследнюю строкуэто надо написать перед циклом
Код: plaintext
a.Skip f.Size -  3 
...
Рейтинг: 0 / 0
18.10.2007, 15:32
    #34878379
gar
gar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
удаление, замена строк
спасибо, но оставляет 2 последних байта :) видать чтото не то делаю
...
Рейтинг: 0 / 0
18.10.2007, 15:34
    #34878384
gar
gar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
удаление, замена строк
пардон. не байта, а последнюю строку в файле. все выше удаляется, а жаль
...
Рейтинг: 0 / 0
18.10.2007, 16:08
    #34878496
klen_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
удаление, замена строк
тогда нужны два цикла

первый на проверку
а второй с новым условием
если нашёл, то перезаписываешь без этой строки
...
Рейтинг: 0 / 0
18.10.2007, 16:37
    #34878655
klen_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
удаление, замена строк
garмне нужно удалить строку если длина строки < 2 и есть символ
наверняка можно и проще, но работает
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
Dim fso, a As Scripting.TextStream, f As Scripting.File, retstring, retstream
Const ForReading =  1 , ForWriting =  2 
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFile("d:\config.sys")

Set a = f.OpenAsTextStream(ForReading, False)

'перейти на предпоследнюю строку
If f.Size >  0  Then a.Skip f.Size -  3 

Dim kluch As Boolean

Do While a.AtEndOfStream <> True
    retstring = a.ReadLine
    If Len(retstring) =  1  Then
        If Asc(retstring) <  32  Then
            kluch = True
        End If
    End If
Loop
a.Close

If kluch = True Then
    kluch = False
    Set a = f.OpenAsTextStream(ForReading, False)
    Do While a.AtEndOfStream <> True
        retstring = a.ReadLine
        If retstring Like "files*" Then
           retstring = "fileshigh=200"
        End If
        If Len(retstring) =  1  Then
            If Asc(retstring) <  32  Then
                kluch = True
            End If
        End If
        If kluch = False Then
            retstream = retstream & retstring & vbCrLf
        End If
    Loop
    a.Close
    
    Set a = f.OpenAsTextStream(ForWriting, False)
    a.Write retstream
    a.Close
End If
...
Рейтинг: 0 / 0
18.10.2007, 16:46
    #34878698
klen_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
удаление, замена строк
gar
я тут ошибся
во втором цикле, код надо заменить
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
    Do While a.AtEndOfStream <> True
        retstring = a.ReadLine
        If retstring Like "files*" Then
           retstring = "fileshigh=200"
        End If
        If Len(retstring) =  1  And Len(retstream) >= (f.Size -  3 ) Then
            If Asc(retstring) <  32  Then
                kluch = True
            End If
        End If
        If kluch = False Then
            retstream = retstream & retstring & vbCrLf
        End If
    Loop
...
Рейтинг: 0 / 0
19.10.2007, 10:21
    #34879985
gar
gar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
удаление, замена строк
спасибо, буду пробовать.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / удаление, замена строк / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]