Есть ли способ установить начальную строку чтения в VBScript?
У меня есть текстовый файл, и он имеет более 85k строк. Есть ли способ установить начальную строку? Например; Я уже прочитал и записал строки 1-10 в другой файл и хочу получить значение в строке 12, чтобы добавить его в последнюю строку, которую я написал. Я хочу прочитать только строку 12.
- Текст / Sample / 1 / ПолучитьЗначение /12
- Текст /Sample/2/ ПолучитьЗначение / 11
- Текст /Sample/3/ ПолучитьЗначение /10
- Текст /Sample/4/ ПолучитьЗначение /9
- Текст /Sample/5/ ПолучитьЗначение /8
- Текст /Sample/6/ ПолучитьЗначение /7
- Текст /Sample/7/ ПолучитьЗначение / 6
- Текст /Sample/8/ ПолучитьЗначение / 5
- Текст /Sample/9/ ПолучитьЗначение / 4
- Текст /Sample/10/ ПолучитьЗначение / 3
- Текст / Sample / 11 / ПолучитьЗначение / 2
- Текст /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
'*********************************************************************************************************