Поправьте код, плз. Работает, но странно...

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

Поправьте код, плз. Работает, но странно...

Сообщение FirstUser » 16.06.2003 (Пн) 16:08

Я продолжаю решать проблему описаную здесь:
http://bbs.vbstreets.ru/viewtopic.php?t=1690
(Убрать пробелы в большом файле используя VBScript)

Желающих помочь оказалось немного, поэтому пришлось ковыряться самому ;)

Наковырял (не без помощи http://sharig.webzone.ru/) следующее:


Код: Выделить всё
Set FSys = CreateObject("Scripting.FileSystemObject")
Set qn = FSys.GetFile("D:\data\proxystats\access2.log")
FileSize1=qn.Size


Function ReplaceAll(SourceString, ReplaceThis, WithThis)

Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.OpenTextFile("D:\data\proxystats\access2.log", 1)

SourceString=file.readall()
ReplaceThis="  "
WithThis =" "

Dim Temp

Temp = Split(SourceString, ReplaceThis)
ReplaceAll = Join(Temp, WithThis)

End Function


Do
Dim strAfter
strAfter=ReplaceAll(SourceString, ReplaceThis, WithThis)

Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.OpenTextFile("D:\data\proxystats\access2.log", 2, true)


file.WriteLine(strAfter)

Set FSys2 = CreateObject("Scripting.FileSystemObject")
Set qn2 = FSys2.GetFile("D:\data\proxystats\access2.log")
FileSize2=qn2.Size

Loop while FileSize1 > FileSize2


Проблема:
Выполняется долго. Делает все что нужно (пробелы удоляются), но висит в списке задач минут 10 и ест 99% CPU. Кажется, что что-то не так с Loop...

Вопрос:
Что еще в коде "не так"? ;)
Может можно что изменить/улучшить

Спасибо!

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 16.06.2003 (Пн) 16:10

Ты бы, уважаемый, не создавал бы в цикле объекты... Вредно это для здоровья :)

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 16.06.2003 (Пн) 16:18

FirstUser
А почему обязательно VBScript, почему нельзя открыть два двочных файла, из одного брать порциями байты и засылать не пробелы в другой?..

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 16.06.2003 (Пн) 16:20

Да потому что это вообще умрет все.

Аглоритм - прочитал - убилпробелы - записал.

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 16.06.2003 (Пн) 17:20

2 FirstUser:
Ты код с закрытыми глазами писал? Если да, то понятно, если нет, то проблема где-то на генетическом уровне.

На первый раз прощается. Держи.
Код: Выделить всё
Public Function test()
   
    Dim fso, src, dst
    Dim line
   
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set src = fso.OpenTextFile("c:\1\spaces0.txt", 1)
    Set dst = fso.OpenTextFile("c:\1\spaces1.txt", 2, True)
   
    Do Until (src.AtEndOfStream)
        line = src.ReadLine
        Do While (InStr(1, line, "  "))
            line = Replace(line, "  ", " ")
        Loop
        dst.WriteLine line
    Loop
   
    dst.Close: Set dst = Nothing
    src.Close: Set src = Nothing
    Set fso = Nothing
   
End Function


Как долго выполняется?

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 16.06.2003 (Пн) 17:26

Кхм..

А не проще ли было:

Код: Выделить всё
dst.write replace(src.readall," ","",1,-1,1)
:wink:

FirstUser
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 15.06.2003 (Вс) 9:27

Сообщение FirstUser » 16.06.2003 (Пн) 17:30

Господа!!!
Я (пока) не разбираюсь в программировании!

Если сделал неправильно, покажите как есть правильно.
ПОЖАЛУЙСТА!

Я же не прошу Вас ОС бесплатно написать. Пару строк кода.

Решение должно быть на VBScript или JScript.

Почему в цикле нельзя создавать объекты?
Это что, так критично для ресурсов?

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 16.06.2003 (Пн) 17:32

2 RayShade:
Нет, не проще.

1. Надо не все пробелы убрать, а только двойные.

2. Представь что файл на пару-тройку метров, а ты его весь вычитывыешь.
Последний раз редактировалось skiperski 16.06.2003 (Пн) 17:34, всего редактировалось 1 раз.

FirstUser
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 15.06.2003 (Вс) 9:27

Сообщение FirstUser » 16.06.2003 (Пн) 17:33

СОРРИ ПОЗДНО ОБНОВИЛСЯ!!!


skiperski писал(а):2 FirstUser:
Ты код с закрытыми глазами писал? Если да, то понятно, если нет, то проблема где-то на генетическом уровне.


Спасибо!!!

Я первый раз писал буквы на Бейсике. Поэтому так плохо получилось.
(Хотя сам еще не понимаю на сколько плохо:)

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 16.06.2003 (Пн) 17:47

2 skiperski

Ну что именно там заменять это не суть важно. Ну поменяй " " и "" на " " и " " :) А файл то и так по любому будет вычитан. Так что какая разница как (ну если только смотря какие вообще то ресурсы у станции будут :? ).

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 16.06.2003 (Пн) 17:58

2 RayShade:
1. В данном случае важно
Код: Выделить всё
?replace("a     x"," ","",1,-1,1)
ax
?replace("a     x","  "," ",1,-1,1)
a   x


2. Файл будет вычитан строками, а не весь целиком. Строку прочитал, обработал, записал. Строки, конечно, могут быть длинными, но всё же не длиннее файла.

FirstUser
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 15.06.2003 (Вс) 9:27

To skiperski

Сообщение FirstUser » 16.06.2003 (Пн) 17:59

Еще раз спасибо!

Проверил. Работает как надо.


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

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

Сейчас этот форум просматривают: AhrefsBot, Mail.ru [бот] и гости: 19

    TopList