Есть ли способ организовать вывод WriteLine в столбцы в текстовом файле? - PullRequest
0 голосов
/ 18 января 2019

Есть ли способ разделить вывод данных WriteLine в текстовом файле на столбцы (например: Date | Location | Size)?

Мне еще не приходилось видеть какую-либо информацию, касающуюся этого, где-либо в Интернете, не уверен, если это возможно, поскольку записываемые данные не являются статичными. Нужна ли мне совершенно другая функция, чтобы скрипт обрабатывал форматирование текстового файла?

Option Explicit
Dim sDirectoryPath,Search_Days,r_nr,iDaysOld,CmdArg_Object,lastModDate
Dim oFSO,oFolder,oFileCollection,oFile,oTF,Inp, SubFolder,fullpath
Set CmdArg_Object = Wscript.Arguments

Select Case (CmdArg_Object.Count)
    Case 3
        sDirectoryPath = CmdArg_Object.item(0)
        Search_Days = CmdArg_Object.item(1)
        r_nr = CmdArg_Object.item(2)
    Case Else
        WScript.Echo "SearchFiles.vbs requires 3 parameters:" & _
            vbCrLf & "1) Folder Path" & _
            vbCrLf & "2) # Days to Search" & _
            vbCrLf & "3) Recursive option (r/nr)"
        WScript.Quit
End Select

Set oFSO = CreateObject("Scripting.FileSystemObject")
iDaysOld=Date+(-1*Search_Days)
Inp = InputBox("Please Enter Desired Location of Log File:")
If Inp= "" Then
    Set oTF = oFSO.CreateTextFile("C:\output.txt")
Else
    Set oTF = oFSO.CreateTextFile(oFSO.BuildPath(Inp, "output.txt"))
End If
Set oFolder = oFSO.GetFolder(sDirectoryPath)
Set oFileCollection = oFolder.Files

WScript.Echo Now & " - Beginning " & Search_Days & " day search of " & sDirectoryPath

If r_nr = "r" Then
    oTF.WriteLine ("Search Parameters-") & _
        vbCrLf & "DirectoryPath: " & sDirectoryPath & _
        vbCrLf & "Older than: " & Search_Days &" Days " & _
        vbCrLf & "Recursive/Non-Recursive: " & r_nr & _
        vbCrLf & "------------------ "
    TraverseFolders oFSO.GetFolder(sDirectoryPath)

    Function TraverseFolders (FolderName)
        For Each SubFolder In FolderName.SubFolders
            For Each oFile In SubFolder.Files
                lastModDate = oFile.DateLastModified
                If (lastModDate <= iDaysOld) Then
                    oTF.WriteLine (oFile.DateLastModified) & " " & oFile.Path
                End If
            Next
            TraverseFolders(Subfolder)
        Next
    End Function
Else
    oTF.WriteLine ("Search Parameters:") & _
        vbCrLf & "DirectoryPath: " & sDirectoryPath & _
        vbCrLf & "Older than: " & Search_Days &" Days " & _
        vbCrLf & "Recursive/Non-Recursive: " & r_nr & _
        vbCrLf & "------------------------- "
    For Each oFile In oFileCollection
        lastModDate = oFile.DateLastModified
        If (lastModDate <= iDaysOld) Then
            oTF.WriteLine (oFile.DateLastModified) & " " & oFile.Path
        End If
    Next
End If

If Inp = "" Then
    WScript.Echo "Now - Finished! Results Placed in: C:\output.txt"
Else
    WScript.Echo "Now - Finished! Results Placed in: " & Inp
End If

1 Ответ

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

Вы можете использовать формат вывода, разделенный разделителями, например, так:

Delim = vbTab
oTF.WriteLine "DateLastModified" & Delim & "Size" & Delim & "Path"
...
For Each oFile in oFileCollection
    oTF.WriteLine oFile.DateLastModified & Delim & oFile.Size & Delim & oFile.Path
Next

Использование вкладок и тщательно выбранный порядок полей имеет то преимущество, что редакторы будут отображать содержимое в (в основном) соответствующих столбцах и вы можете импортировать его как CSV в другие программы.

Если вы стремитесь к формату с фиксированной шириной, вам нужно дополнить данные самостоятельно, например, с помощью пользовательских функций заполнения, например,

Function LPad(s, l)
    n = 0
    If l > Len(s) Then n = l - Len(s)
    LPad = String(n, " ") & s
End Function

Использование объекта StringBuilder также может быть вариантом, как описано в в этом ответе на другой вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...