1

Тема: VBS. Как считать определенную строку в текстовом файле?

Есть txt файл с допустим 10 строками. Нужно считать только 1,3,4,8 строки и каждую строку занести в 4 разных переменных. Как это можно сделать?
Пример для считывания всего текста и занесения его в переменную

Set t_file = FSO.OpenTextFile("commands.txt", 1) 
source = t_file.ReadAll 
t_file.Close

Тут через t_file.ReadAll  я считываю весь файл, но я не нашел информации как считать определенных строки.

2

Re: VBS. Как считать определенную строку в текстовом файле?

SNR93, вариантов может быть несколько. Выбор конкретного зависит от заданных условий.

Прочитать строку №NN сразу не представляется возможным: сначала должны быть прочтены предыдущие строки. Можно несколько ускорить процесс, не читая (.ReadLine()), а пропуская (.SkipLine()) строки.

Если файл невелик, то, действительно, можно прочитать его целиком (.ReadAll()) в память, разбить построчно в массив (Split(…, vbCrLf)), а затем брать потребные элементы массива.

3

Re: VBS. Как считать определенную строку в текстовом файле?

а затем брать потребные элементы массива

Чтобы упростить задачу SNR93: потребным элементом массива будет выступать номер строки за вычетом единицы, т.к. массив начинается с нулевого индекса. Т.е:

Massiv = Split(source, vbNewLine)
a = Massiv(1-1)
b = Massiv(3-1)
c = Massiv(4-1)
d = Massiv(8-1)

4

Re: VBS. Как считать определенную строку в текстовом файле?

Что-то у меня ничего не получается, сделал так

Set FSO = CreateObject("Scripting.FileSystemObject") 
Set t_file = FSO.OpenTextFile("commands.txt", 1) 
source = t_file.ReadAll 
t_file.Close
Massiv = Split(source, vbNewLine)
a = Massiv(1-1)
b = Massiv(3-1)
c = Massiv(4-1)
d = Massiv(8-1)
Set f = FSO.OpenTextFile("test.txt", 2, True) 
f.WriteLine "" &a
f.WriteLine "" &d
f.Close

Выдает ошибку

индекс выходит за пределы допустимого диапазона:'[number: 2]'

Помогите, что не так? В commands.txt 10 строк, в строках идут 01-02-03-04 и т.д. до 10

5

Re: VBS. Как считать определенную строку в текстовом файле?

SNR93 пишет:

Есть txt файл с допустим 10 строками. Нужно считать только 1,3,4,8 строки и каждую строку занести в 4 разных переменных.

SNR93 пишет:

В commands.txt 10 строк,…

Option Explicit

Dim strFileName

Dim arrContent                                         ' Массив для содержимого файла
Dim anyValueA, anyValueB, anyValueC, anyValueD         ' Четыре переменные

strFileName = "commands.txt"                           ' Имя файла

With WScript.CreateObject("Scripting.FileSystemObject")
    If .FileExists(strFileName) Then                   ' Если файл существует
        With .OpenTextFile(strFileName)                ' Открываем его как текст
            arrContent = Split(.ReadAll(), vbCrLf)     ' Читаем всё содержимое и помещаем в массив
            
            .Close                                     ' Закрываем файл
        End With
        
        If UBound(arrContent) >=7 Then                 ' Если длина сформированного массива не меньше восьми элементов
            anyValueA = arrContent(0)                  ' Присваиваем переменной 1-й элемент массива
            anyValueB = arrContent(2)                  ' Присваиваем переменной 3-й элемент массива
            anyValueC = arrContent(3)                  ' Присваиваем переменной 4-й элемент массива
            anyValueD = arrContent(7)                  ' Присваиваем переменной 8-й элемент массива
            
            WScript.Echo anyValueA, anyValueB, anyValueC, anyValueD
        Else
            WScript.Echo "Not enough lines [" & CStr(UBound(arrContent) + 1) & "] in [" & strFileName & "]"
        End If
    Else
        WScript.Echo "Can't find file [" & strFileName & "]"
    End If
End With

WScript.Quit

6

Re: VBS. Как считать определенную строку в текстовом файле?

Хм, выдает

Not enough lines [1] in [commands.txt]

Содержимое commands.txt на данный момент такое:

Алексей
Федор
Иван
Никита
Женя
Святослав
Анатолий
Артем
Александр
Сергей

7

Re: VBS. Как считать определенную строку в текстовом файле?

SNR93:

Алексей Иван Никита Артем

Упакуйте Ваш «commands.txt» в архив (обязательное условие), выложите на RGhost. Ссылку — сюда.

8

Re: VBS. Как считать определенную строку в текстовом файле?

alexii пишет:

SNR93:

Алексей Иван Никита Артем

Упакуйте Ваш «commands.txt» в архив (обязательное условие), выложите на RGhost. Ссылку — сюда.

http://rghost.ru/39207144 вот мой commands.txt

9

Re: VBS. Как считать определенную строку в текстовом файле?

SNR93, как я и предполагал, Ваш «commands.txt» содержит в качестве разделителей строк только символы LineFeed («LF»/«0x0A»), используемые преимущественно в Unix/Linux: Перевод строки — Википедия.

Что делать? Либо поменять в строке:

arrContent = Split(.ReadAll(), vbCrLf)     ' Читаем всё содержимое и помещаем в массив

«vbCrLf» на «vbLf», либо использовать редактор, сохраняющий файлы с разделителями строк, используемыми в Microsoft Windows.

Кстати, в каком редакторе был создан файл «commands.txt»?

10

Re: VBS. Как считать определенную строку в текстовом файле?

В Notepad++

11

Re: VBS. Как считать определенную строку в текстовом файле?

Убедитесь, что для новых файлов установлен «родной» для Windows формат:

http://img705.imageshack.us/img705/4221/image00020120714174528.png

Изменить формат текущего документа можно через меню «\Правка\Формат Конца Строк…».

12

Re: VBS. Как считать определенную строку в текстовом файле?

у меня все так и стоит

13

Re: VBS. Как считать определенную строку в текстовом файле?

Я пожалуй побурчу немного не в тему.

Ну, начните жеж уже наконец использовать sqlite. Он же для того и сделан, как замена "текстовым файликам". Да, вначале буден сложно и непривычно. Возможно придётся написать некоторые свой "обёртки". Зато будет некоторый опыт работы с базами данных. И целая туева хуча вопросов отпадёт сама собой.

14

Re: VBS. Как считать определенную строку в текстовом файле?

SNR93 пишет:

у меня все так и стоит

Откройте Ваш файл «commands.txt», включите отображение концов строк (\Вид\Отображение символов\Отображать все символы) и убедитесь, что в нём используется Unix-формат.

2max7:

1. Работа с текстовым файлом на порядок проще.
2. Ничто не мешает работать с текстовым файлом, как с базой данных. Для этого есть несколько способов, причём, некоторые, как ADO — непосредственно «из коробки».

Если есть желание пообсуждать — заводите тему в Script-Coding.com community.