-1

我有一个希望在 VBS 中编辑的 .txt 文件。数据如下:

时间,第 1 列,第 2 列
23/08/2017 上午 8:30:00,数据,数据
23/08/2017 上午 8:35:00,数据,数据
2017 年 8 月 23 日上午 8:40:00,数据,数据
2017 年 8 月 23 日上午 8:45:00,数据,数据

我想要的是在第一行末尾添加另一个名为batch23/08/2017 8:30:00 AM的“列”,然后是 time ( ) 的第一个值来组成该列的数据,以便最终结果类似于以下内容:

时间,第 1 列,第 2 列,批次
2017 年 8 月 23 日上午 8:30:00,数据,数据,2017 年 8 月 23 日上午 8:30:00
2017 年 8 月 23 日上午 8:35:00,数据,数据,2017 年 8 月 23 日上午 8:30:00
2017 年 8 月 23 日上午 8:40:00,数据,数据,2017 年 8 月 23 日上午 8:30:00
2017 年 8 月 23 日上午 8:45:00,数据,数据,2017 年 8 月 23 日上午 8:30:00

请注意,每列之间存在逗号分隔符。

4

2 回答 2

0

你可以这样做:

  • 开始逐行读取文件中的数据,并将其与要在每行末尾附加的数据一起存储在临时变量中。
  • 对于第一行,要附加的数据是“, Batch”,其余行要附加的数据是第二行的“时间值”。
  • 以写入模式打开文件并写入存储在该临时变量中的数据

代码:

strPath = "C:\Users\gr.singh\Desktop\Desktop\Gurman\2017\as.txt"    'Replace this path with your file path
Set fso = CreateObject("scripting.filesystemobject")
Set rfile = fso.OpenTextFile(strPath,1)                'File opened in Read-only mode
While Not rfile.AtEndOfStream
    temp=rfile.ReadLine()
    If rfile.Line=2 Then                               'The first line has been read by using the readline method due to which rfile.line gets set to 2. Hence, I have used 2 here for the 1st line. Similarly, I have used 3 fro the 2nd line in the ElseIf Condition
        dataToAppend = "Batch"
    ElseIf rfile.Line=3 Then
        dataToAppend = Split(temp,",")(0)
    End If
    fulldata = fulldata & temp&", "&dataToAppend&"||"
Wend
rfile.Close
fulldata = Left(fulldata,Len(fulldata)-2)
Set wfile = fso.OpenTextFile(strPath,2)                'File opened in write mode
tempArr = Split(fulldata,"||")
For i=0 To UBound(tempArr)
    wfile.WriteLine tempArr(i)
Next
wfile.Close
Set fso= Nothing

输出: 在此处输入图像描述

于 2017-08-23T10:00:47.517 回答
0

如果您的文件相当小,您可以将其作为一个整体阅读并像这样处理它:

filename = "C:\path\to\your.txt"

Set fso = CreateObject("Scripting.FileSystemObject")

txt  = fso.OpenTextFile(filename).ReadAll
data = Split(txt, vbNewLine)

If UBound(data) >= 0 Then data(0) = data(0) & ",batch"
If UBound(data) >= 1 Then
  batchval = Left(data(1), InStr(data(1), ",")-1)
  data(1) = data(1) & "," & batchval
End If
For i = 2 To UBound(data)
  data(i) = data(i) & "," & batchval
Next

fso.OpenTextFile(filename, 2).Write Join(data, vbNewLine)

但是,对于大文件,不建议使用这种方法,因为它可能会导致内存耗尽,从而导致您的计算机停止运行。如果您的文件很大,您最好逐行处理文件,将输出写入临时文件,并在完成后替换原始文件。

filename    = "C:\path\to\your.txt"
tmpfilename = filename & ".tmp"

Set fso = CreateObject("Scripting.FileSystemObject")

inFile  = fso.OpenTextFile(filename)
outFile = fso.OpenTextFile(tmpfilename, 2, True)

If Not inFile.AtEndOfStream Then outFile.WriteLine inFile.ReadLine & ",batch"
If Not inFile.AtEndOfStream Then
  line = inFile.ReadLine
  batchval = Left(line, InStr(line, ",")-1)
  outFile.WriteLine line & "," & batchval
End If
Do Until inFile.AtEndOfStream
  outFile.WriteLine inFile.ReadLine & "," & batchval
Loop

inFile.Close
outFile.Close

fso.DeleteFile filename, True
fso.MoveFile tmpfilename, filename
于 2017-08-23T19:05:52.217 回答