Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否使用vbscript在多行中组合管道分隔的文本行?_Vbscript - Fatal编程技术网

是否使用vbscript在多行中组合管道分隔的文本行?

是否使用vbscript在多行中组合管道分隔的文本行?,vbscript,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-S

我有一个输出的文本文件,基本上如下所示:

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.
七条数据分别位于各自的行中,但仍由“|”分隔,以便另一个软件正确读取


我每天花大约一个小时手工修改文本文件,所以我一直在努力寻找一个可以用来做这件事的例子,但一直没有任何运气

未经测试,但像这样的东西可能会成功。(本质上,它将输入作为流复制到输出,但输入中的换行符转换为管道字符,输出中的每七个管道转换为换行符)

Set fs=CreateObject(“Scripting.FileSystemObject”)
设置f=fs.OpenTextFile(“D:\data\thefile.txt”,1)
设置o=fs.OpenTextFile(“D:\data\combined.txt”,2,True)
管道计数=0
当f.AtEndOfFile为真时做
如果f.AtEndOfLine=True,则
c=f。读取(2)“跳过CR+LF
c=“|””,然后假装我们有一个管道角色
其他的
c=f.Read(1)
如果结束
如果c=“|”则
管道计数=管道计数+1
如果管道计数=7,则
管道计数=0
o、 WriteLine()
其他的
o、 写(“|”)
如果结束
其他的
o、 写入(c)
如果结束
结束时
o、 关闭()

此代码正常。我只测试了你的示例文本,没有测试大文件

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

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()

我从来没有想过要这样做,第一次尝试ST8Z6FR57ABE6A8RE9UF就成功了。我真希望我几个月前问过这个问题,这样可以省下我几周的手工编辑时间。也谢谢你,布鲁西。我知道你说这是未经测试的,不幸的是,我犯了一个错误,我怀疑我自己是否能解决,我能从你写的东西中看出逻辑,我很欣赏你用另一种方式来看待它。我尊敬你们两位,再次感谢你们。
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()