powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / удаление, замена строк
8 сообщений из 8, страница 1 из 1
удаление, замена строк
    #34877834
Фотография 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
удаление, замена строк
    #34878342
Фотография klen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
garкак быстро перейти на предпоследнюю строкуэто надо написать перед циклом
Код: plaintext
a.Skip f.Size -  3 
...
Рейтинг: 0 / 0
удаление, замена строк
    #34878379
Фотография gar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо, но оставляет 2 последних байта :) видать чтото не то делаю
...
Рейтинг: 0 / 0
удаление, замена строк
    #34878384
Фотография gar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пардон. не байта, а последнюю строку в файле. все выше удаляется, а жаль
...
Рейтинг: 0 / 0
удаление, замена строк
    #34878496
Фотография klen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тогда нужны два цикла

первый на проверку
а второй с новым условием
если нашёл, то перезаписываешь без этой строки
...
Рейтинг: 0 / 0
удаление, замена строк
    #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
удаление, замена строк
    #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
удаление, замена строк
    #34879985
Фотография gar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо, буду пробовать.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / удаление, замена строк
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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