Чтение определенной части текстовой строки с использованием VBA - PullRequest
0 голосов
/ 28 января 2019

Я пытаюсь получить 827-ю строку из текстового файла для записи в ячейку.Подобных файлов много, поэтому я пытаюсь использовать макрос.Текстовый файл выглядит так:

"Drag Convergence"
"Iterations" "cd"
1     7.74776e-01
2     6.51021e-01
3     5.58885e-01
.....
824     3.57617e-01
825     3.57617e-01

Я просто хочу записать число «3.57617e-01» в ячейку.Я могу сделать расположение ячеек самостоятельно, но у меня не было хорошего способа прочитать это значение, а затем записать его в ячейку, скажем (1,1)

Расположение моего файла

strFile = "D:\Analiz\Database\NACA63220_" & Mach(k) & Alpha(j) & Letter(i) & ".txt"

То, что я делал, использовало

strPath = "D:\Analiz\Database\"
strExt = ".txt"
strSection = "Lift Convergence"
strValue = "825     "

With shtResult
     .Cells(1,1).Value = strValue
End With

strFile = "D:\Analiz\Database\NACA63220_" & Mach(k) & Alpha(j) & Letter(i) & ".txt"

Set data=shtSource.QueryTables.Add(Connection:TEXT;" & strPath & strFile, Destination:=shtSource.Cells(1, 1))

With data
.TextFileStartRow = 1
.TextFileParseType = xkDelimited
.TextFileVonsecutiveDelimeter = False
.TextFileTabDelimiter = False
.Text FileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1)
.TextFileTrailingMinusNumbers = True

.Refresh BackgroundQuery:=False
End With

Set fndSection = data.ResultRange.Find(strSection)
Set fndValue = data.ResultRange.Find(strValue, fndSection)
shtResult.Cells(shtResult.Rows.Count, 1).End(xkUp).Offset(1).Value = Replace(findValue, strValue, "")

Это выдает ошибку времени выполнения 1004, и когда я нажимаю отладку, она выделяет строку с .Refresh BackgroundQuery

Я не все здесь выложилнапример, определение размеров и т. д., поскольку мне приходится использовать свой телефон для доступа к этому сайту, поэтому я снова пишу все коды на своем телефоне.

Редактировать: я добавил больше строк, проблема высвечивает строку Обновить фоновый запрос, когда янажмите отладку.На самом деле я пытался реализовать это, настроив свою проблему:

Импорт данных из нескольких текстовых файлов в Excel VBA

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Я бы посоветовал вам не использовать стандартную обработку файлов VBA для этого: обработка файлов VBA начинает читать файл с первой строки и продолжается построчно, пока не достигнет строки, которую вы ищете.Поскольку вам нужно прочитать 827 строк, вы ожидаете ответа 827 раз.

Вместо этого я бы попытался найти командную строку, которая может обработать это, что-то вроде:

tail -1 <filename> >output.txt (or head -827 <filename> | tail -1 >output.txt)

Переведите это в Excel VBA, что-то вроде:

Shell "tail -f <filename> >output.txt" //pseudo-code

А затем используйте стандартную обработку текста VBA для чтения output.txt.

0 голосов
/ 28 января 2019

используйте эту функцию для чтения конкретной строки из текстового файла

    ' read specific line no.
    ' RESULT : searched text (string)
    Function ReadLine(FilePath, LineNumber) As String
    Dim i As Integer, count As Long
    Dim strLine As String
    i = FreeFile
    Open FilePath For Input As #i
    count = 0

    While Not EOF(i)
        Line Input #i, strLine
        count = count + 1
        If count = LineNumber Then
            ReadLine = strLine
            Close #i
            Exit Function
        End If
    Wend

Close i
End Function

Есть ли у вас какие-либо другие проблемы с реализацией?уточните, пожалуйста,

второй код для разделения строк

     Function BreakString(a As String, pos As Integer) As String
     Dim WrdArray() As String
     WrdArray() = Split(a, "     ")
     BreakString = WrdArray(pos)
     End Function

Dim Text, Part1, Part2 As String
Text = "827     3.57617e-01"
Part1 = BreakString(CStr(Text), 0)
Part2 = BreakString(CStr(Text), 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...