VBS быстрый цикл через строки - PullRequest
0 голосов
/ 29 марта 2019

Мне нужно зациклить и переставить до 2000 строк текстового файла (который всегда будет увеличиваться в размере), получить общую длину и, исходя из длины, мне нужно скопировать две записи в другой файл.Проблема в том, что на обработку всего требуется много времени.Я не уверен, что это лучший подход, но любая помощь приветствуется.

filename = "Jul2017.txt"
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile(filename)

Do Until f.AtEndOfStream
    r1 = f.ReadLine
    Do Until f.AtEndOfStream
        r2 = f.ReadLine
        if len(r1 & r2) > 17 then
           'Do something
        end if
    Loop
Loop

WScript.Echo "Done!"
f.Close

Это должно решить проблему с вложенностью цикла.

filename = "Jul2017.txt"

Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile(filename, 1)

For x = 1 to 2000
r1 = f.ReadLine
For z = 1 to 2000
r2 = f.ReadLine
if len(r1 & r2) > 17 then
'Do something
end if
next
next
WScript.Echo "Done!"
f.Close

Input
-----------
TMM87R2
YUU52R7VVB
VLL73IOP3
TMM54Y2
VLL21CSZ
YUU56
VLL71BVR54
...

Что мне нужно сделать:

First iteration
TMM87R2 & TMM87R2 < 17 characters ( do nothing )
TMM87R2 & YUU52R7VVB > 17 characters ( copy the lines )
TMM87R2 & VLL73IOP3 etc.
...
TMM87R2 & VLL71BVR54

Second iteration
YUU52R7VVB & TMM87R2
YUU52R7VVB & YUU52R7VVB
...

Until last iteration
VLL71BVR54 & VLL71BVR54

Каждая строка должна быть «помещена» рядом с каждой строкой в ​​файле, и если общий размер превышает 17 символов, скопируйте две записи в другой файл.Я знаю, что зацикливаюсь 2000 раз, и это повторяется, но порядок записей имеет значение.

1 Ответ

0 голосов
/ 01 апреля 2019

Почему бы не прочитать файл в массив в памяти

Это в VB.NET, но должно дать вам подсказку

        Dim lines = File.ReadAllLines("Jul2017.txt")

        Rem Arrays are zero based, and we cant compare the last element with anything so ...
        For first = 0 To lines.Length - 2
            Dim line = lines(first)
            Dim len = line.Length
            For perm = first + 1 To lines.Length - 1
                If lines(perm).Length + len > 17 Then
                    Rem Do Something
                    Console.WriteLine(line & " & " & lines(perm))
                End If
            Next
        Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...