Есть ли способ установить начальную строку чтения в VBScript?

У меня есть текстовый файл, и он имеет более 85k строк. Есть ли способ установить начальную строку? Например; Я уже прочитал и записал строки 1-10 в другой файл и хочу получить значение в строке 12, чтобы добавить его в последнюю строку, которую я написал. Я хочу прочитать только строку 12.

  1. Текст / Sample / 1 / ПолучитьЗначение /12
  2. Текст /Sample/2/ ПолучитьЗначение / 11
  3. Текст /Sample/3/ ПолучитьЗначение /10
  4. Текст /Sample/4/ ПолучитьЗначение /9
  5. Текст /Sample/5/ ПолучитьЗначение /8
  6. Текст /Sample/6/ ПолучитьЗначение /7
  7. Текст /Sample/7/ ПолучитьЗначение / 6
  8. Текст /Sample/8/ ПолучитьЗначение / 5
  9. Текст /Sample/9/ ПолучитьЗначение / 4
  10. Текст /Sample/10/ ПолучитьЗначение / 3
  11. Текст / Sample / 11 / ПолучитьЗначение / 2
  12. Текст /Sample/12/ ПолучитьЗначение / 1

2 ответа

Решение

Объект TextStream обеспечивает только последовательное прямое чтение. См. Документы для .Skip, .SkipLine, .Read, .ReadLine и .ReadAll.

Таким образом, вам нужно пропустить / прочитать нужную позицию или выполнить некоторую среднечисленную работу над полным содержимым (.Readall) файла.

Вот пример функции, которая может помочь вам:

Option Explicit
Dim Title,FromLine,ToLine,fso,Readfile,strBuff,InputFile,TotalNbLines
Title = "Extract Lines From TextFile"
InputFile = "c:\test.txt"
Set fso = CreateObject("Scripting.FileSystemObject")
Set Readfile = Fso.OpenTextFile(InputFile,1)
strBuff = Readfile.ReadAll
TotalNbLines = Readfile.Line
Readfile.Close
'*******************************************************************************************************
MsgBox "The total number of lines in this file """& InputFile &""" = "& TotalNbLines,VbInformation,Title
'*******************************************************************************************************
MsgBox "Extract the 3 last lines" & vbcrlf & vbcrlf &_
ExtractLinesFromTextFile(InputFile,TotalNbLines - 2,TotalNbLines),64,Title 'To extract the 3 last lines
'*******************************************************************************************************
MsgBox "Extract line from line 1 to 2" & vbcrlf & vbcrlf &_
ExtractLinesFromTextFile(InputFile,1,2),64,Title 'Extract line from line 1 to 2
'*******************************************************************************************************
MsgBox "Extract line N°2" & vbcrlf & vbcrlf &_
ExtractLinesFromTextFile(InputFile,2,2),64,Title 'Extract line N°2
 '*******************************************************************************************************
MsgBox "Extract line from line 1 to 5" & vbcrlf & vbcrlf &_
ExtractLinesFromTextFile(InputFile,1,5),64,Title 'Extract line from line 1 to 5
 '*******************************************************************************************************
MsgBox "Extract line from line 1 to 10" & vbcrlf & vbcrlf &_
ExtractLinesFromTextFile(InputFile,1,10),64,Title'Extract line from line 1 to 10
 '*******************************************************************************************************
MsgBox "Extract line N° 12" & vbcrlf & vbcrlf &_
ExtractLinesFromTextFile(InputFile,12,12),64,Title'Extract line N° 12
'*********************************************************************************************************
Public Function ExtractLinesFromTextFile(ByRef TextFile, ByRef FromLine, ByRef ToLine) '<-- Inclusive
    Const TristateUseDefault = -2 'To Open the file using the system default.
    On Error Resume Next
    If FromLine <= ToLine Then
        With CreateObject("Scripting.FileSystemObject").OpenTextFile(TextFile,1,true,TristateUseDefault)
            If Err.number <> 0 Then
                MsgBox err.description,16,err.description
                Exit Function
            Else
                Do Until .Line = FromLine Or .AtEndOfStream
                    .SkipLine
                Loop
                Do Until .Line > ToLine Or .AtEndOfStream
                    ExtractLinesFromTextFile = ExtractLinesFromTextFile & (.ReadLine & vbNewLine)
                Loop
            End If
        End With
    Else
        MsgBox "Error to Read Line in TextFile", vbCritical,"Error to Read Line in TextFile"
    End If
End Function
'*********************************************************************************************************
Другие вопросы по тегам