使用vbscript将多行中的管道分隔行组合起来?

时间:2015-10-07 16:51:00

标签: vbscript

我有一个输出的文本文件,看起来基本上是这样的:

SMITHERSON, SMITH|00012345|15-Jan-1999|000885340
619649339|29-Sep-2015 00:09:30|Black|JOHNERSON, JOHN
00067890|02-Dec-1996|000490365|620094551
29-Sep-2015 23:06:01|Green|DAVISON, DAVE|00086543|06-Jun-2001|000938585
226438332|28-Sep-2015 00:12:12|Yellow

七个数据,它们总是按照正确的顺序排列,但不幸的是它们一起运行到不同的行。每行末尾都有回车符+换行符,并且没有管道分隔符。单个数据块永远不会分成多行 - 我很难解释,所以这是另一个例子:

DATA 1|DATA 2|DATA 3
DATA 4
DATA 5|DATA 6|DATA 7
DATA 1|DATA 2|DATA 3|DATA 4
DATA 5|DATA 6|DATA 7
etc...

它们之间会有空格,但每条数据都会保留在它自己的行上。

我试图把它变成这个:

SMITHERSON, SMITH|00012345|15-Jan-1999|000885340|619649339|29-Sep-2015 00:09:30|Black
JOHNERSON, JOHN|00067890|02-Dec-1996|000490365|620094551|29-Sep-2015 23:06:01|Green
DAVISON, DAVE|00086543|06-Jun-2001|000938585|226438332|28-Sep-2015 00:12:12|Yellow

DATA 1|DATA 2|DATA 3|DATA 4|DATA 5|DATA 6|DATA 7
DATA 1|DATA 2|DATA 3|DATA 4|DATA 5|DATA 6|DATA 7
etc.

七个数据各自独立,但仍然被' |'另一个软件正确读取。

我每天花大约一个小时手工纠正文本文件,所以我一直试图找到一个例子,我可以这样做一段时间,但没有任何运气包裹我的头这个。

2 个答案:

答案 0 :(得分:0)

未经测试,但这样的事情可能会这样做。 (基本上它将输入作为流复制到输出,但输入中的换行符转换为管道符号,输出中的每个第七个管道都转换为换行符)

Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.OpenTextFile("D:\data\thefile.txt", 1)
Set o = fs.OpenTextFile("D:\data\combined.txt", 2, True)
pipecount = 0
Do While f.AtEndOfFile <> True

    If f.AtEndOfLine = True Then
        c = f.Read(2) ' Skip the CR+LF
        c = "|"       ' and pretend we got a pipe character
    Else
        c = f.Read(1)
    End If

    If c = "|" Then
        pipecount = pipecount + 1
        If pipecount = 7 Then
            pipecount = 0
            o.WriteLine()
        Else
            o.Write("|")
        End If
    Else
        o.Write(c)
    End If

End While
o.Close()

答案 1 :(得分:0)

此代码没问题。我只测试了你的示例文本,而不是大文件。

它将用分隔符替换换行符,然后将整个文件转换为一个大数组:

Set fso = CreateObject("Scripting.FileSystemObject")
Set input = fso.OpenTextFile("input.txt", 1)
Set output = fso.OpenTextFile("output.txt", 2, True)

Dim data: data = input.ReadAll
input.Close()
data = Replace(data, vbCrlf, "|")
data = Split(data, "|")

For i=0 To UBound(data) Step 7
   output.WriteLine data(i) & "|" & data(i+1) & "|" & data(i+2) & "|" & data(i+3) & "|" & data(i+4) & "|" & data(i+5) & "|" & data(i+6)
Next

output.Close()