Сумма значений в массиве Vbscript

В приведенном ниже коде мне удалось просмотреть 9 текстовых файлов (количество файлов может различаться) и получить определенную строку в этих текстовых файлах. Значение, которое я получил, является количественным и всегда указывается в одном и том же месте. У меня возникли трудности с получением суммы этих величин.

Текущий код:

Set oFile2 = FSO.OpenTextFile(File.path, ForReading)

i = 0
'process text files
Do While oFile2.AtEndOfStream <> true
text = oFile2.ReadLine
'WSCript.Echo text
    ReDim Preserve SSheet(i)
SSheet(i) = text
i=i+1
Loop

oFile2.Close
Set oFile2 = Nothing
Set objFSO = Nothing

'find row and strips down quantity
Dim QtyTrim
QtyTrim = Mid((SSheet(30)),6,4)

'convert quantity to int
Dim QtyInt
QtyInt = CInt(QtyTrim)

WSCript.echo QtyInt

Отвечает ли это на ваш вопрос? Как суммировать значения в цикле

user692942 13.05.2024 12:31
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
0
1
69
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Суммирование чисел из текстовых файлов

  • Вызывает процедуру (Main), которая перебирает файлы заданной папки (FOLDER_PATH) и для каждого файла с заданным расширением (FILE_EXTENSION) вызывает функцию (GetQuantity), которая извлекает строку (FoundString), определенную константами функции, преобразует строку в целое число и передает целое число обратно в процедуру, где оно добавляется в переменную (Total). Наконец, отображается окно сообщения с итоговой суммой.
  • Сосредоточьтесь на функции GetQuantity и на том, как она используется в процедуре вызова, которая может отличаться от того, что вы имели в виду. Непонятно, почему вы решили, что предыдущий код не имеет значения.
  • Имейте в виду, что функция возвращает либо целое число, либо Empty.
Option Explicit

Main
Sub Main()
    
    Const FOLDER_PATH = "C:\Test"
    Const FILE_EXTENSION = "txt"
    
    Dim fso: Set fso = CreateObject("Scripting.FileSystemObject")
    
    If Not fso.FolderExists(FOLDER_PATH) Then
        MsgBox "The path """ & FOLDER_PATH & """ doesn't exist!", vbExclamation
        Exit Sub
    End If
    
    Dim fsoFile, Quantity, Total, FilesFound
    
    For Each fsoFile In fso.GetFolder(FOLDER_PATH).Files
        If StrComp(fso.GetExtensionName(fsoFile), FILE_EXTENSION, _
                vbTextCompare) = 0 Then
            FilesFound = FilesFound + 1
            Quantity = GetQuantity(fso, fsoFile.Path)
            If Not IsEmpty(Quantity) Then
                Total = Total + Quantity
                Quantity = Empty ' reset for the next iteration
            End If
        End If
    Next
    
    If IsEmpty(FilesFound) Then
        MsgBox "No ." & FILE_EXTENSION & "-files found!", vbExclamation
        Exit Sub
    End If
    
    If IsEmpty(Total) Then
        MsgBox "No quantities found!", vbExclamation
        Exit Sub
    End If

    ' Continue, e.g.:
    MsgBox "Total: " & Total, vbInformation
    
End Sub
Function GetQuantity(fso, FilePath)
    
    Const STRING_LINE = 31
    Const STRING_FIRST_CHAR = 6
    Const STRING_LENGTH = 4
    
    Dim fsoTextFile: Set fsoTextFile = fso.OpenTextFile(FilePath, 1)

    Dim Line, FoundString
    
    Do Until fsoTextFile.AtEndOfStream
        Line = Line + 1
        If Line = STRING_LINE Then
            FoundString = fsoTextFile.ReadLine
            Exit Do
        Else
            fsoTextFile.ReadLine
        End If
    Loop
    
    fsoTextFile.Close
    
    If IsEmpty(FoundString) Then Exit Function
        
    On Error Resume Next
        GetQuantity = CLng(Mid(FoundString, STRING_FIRST_CHAR, STRING_LENGTH))
    On Error GoTo 0

End Function

Это сработало намного лучше, чем мой предыдущий пример, очень ценю!

Muhnamana 06.05.2024 14:19

Другие вопросы по теме