Я использую VBscript для сортировки информации в текстовом файле на листе excel. Я могу это сделать, но читается только одна строка текста, и элемент управления цикла, похоже, не переходит к следующей строке текстового файла. Я использую для этого AtEndOfStream, но, как я уже сказал, я получаю только одну строку вывода. Может кто-нибудь помочь мне выяснить, как выполнить программу до конца файла?Как определить конец текстового файла (EOF) в vbscript?
Вот код:
Set objExcel = CreateObject("Excel.Application") 'Bind to the Excel object
objExcel.Workbooks.Add 'Create a new workbook.
Sheet = 1 'Select the first sheet
Set objSheet = objExcel.ActiveWorkbook.Worksheets(Sheet) 'Bind to worksheet.
objSheet.Name = "ErrorSpreadsheet" 'Name the worksheet
strExcelPath = "c:\scripts\ErrorSpreadsheet.xlsx" 'Set the save location
objSheet.Range("A1:E1").Font.Bold = True
objExcel.Columns(5).AutoFit()
objSheet.Cells(1, 1).Value = "Date" 'Row 1 Column 1 (A)
objSheet.Cells(1, 2).Value = "Time" 'Row 1 Column 2 (B)
objSheet.Cells(1, 3).Value = "Category" 'Row 1 Column 3 (C)
objSheet.Cells(1, 4).Value = "Error" 'Row 1 Column 4 (D)
objSheet.Cells(1, 5).Value = "Index" 'Row 1 Column 5 (E)
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("c:\scripts\ErrorMsg.txt",1)
i = 0
r = 2
c = 1
j = 0
Do While NOT objFile.AtEndOfStream
Redim Preserve arrFileLines(10)
arrFileLines(i) = objFile.ReadLine
text = arrFileLines(j)
'Dim a()
a = Split(text,";")
For Each line In a
objSheet.Cells(r,c).Value = a(i)
i = i + 1
c = c + 1
Next
j = j + 1
r = r + 1
Loop
objFile.Close
objExcel.ActiveWorkbook.SaveAs strExcelPath
objExcel.ActiveWorkbook.Close
objExcel.Application.Quit
Я написал код, в настоящее время таким образом, что я не получаю никаких ошибок. В моем файле excel у меня есть строка заголовка, а также одна строка разделенного текстового файла, но не любая из следующих строк. Текстовый файл записывается так:
9/23;12:00;cat;error;236
9/24;12:30;cat2;error;897
9/24;4:06;cat5;error;23
9/25;3:45;cat1;error;54
9/26;1:09;cat6;error;18
Так что выход я получаю в Экслах Excel Output
Может кто-то помочь мне выяснить, как добраться до конца текстового файла?
Вы заметите, что, так как вы повторно 'i', вы добавляете первая строка в 'arrFileLines (0)', но во второй раз вы должны добавить строку в свой 'arrFileLines (i)', вы добавите ее в 'arrFileLines (4) из-за итерации в' For' петля, правильно? Кроме того, вы добавляете строку в 'arrFileLines (i)', но затем читаете из 'arrFileLines (j)', что может вызвать непредсказуемые проблемы. Я бы работал с 'i' (или другой лучшей именованной переменной) для' arrFileLines' и с 'j' (или, опять же, другой лучшей именованной переменной) для' a' и избегать повторного использования таких переменных, как этот –
Plus, ваш 'Redim Preserve arrFileLines (10)' внутри цикла бесполезно. Для каждой итерации вы повторно объявляете 'arrFileLines' с размером 10, но сохраняете существующие данные.Вы можете либо объявить его перед циклом без 'Preserve', либо фактически работать с ним динамически, с' ReDim arrFileLines (-1) перед циклом, а затем внутри цикла вы выполняете 'ReDim Preserve arrFileLines (UBound (arrFileLines) +1) 'иметь массив с правильными размерами –
@VictorMoraes Спасибо за ответ, но если я попытаюсь изменить строку arrFileLines (i) = objFile.ReadLine на arrFileLines (j) = objFile.ReadLine, то я получаю сообщение об ошибке «Подзаголовок вне диапазона:« i »в строке objSheet.Cells (r, c) .Value = a (i). Как я могу это решить? – krishna