【问题标题】:split huge text file and write as separate text files based on character拆分巨大的文本文件并根据字符写入单独的文本文件
【发布时间】:2014-01-27 07:48:03
【问题描述】:

我有一个巨大的 .txt 文件,我的网络应用程序每天生成大约 500MB,它连续有 21 个字段,每个字段用管道字符 | 分隔,它有超过 200 万行在里面。 对于速度情况,我将输入文件按其大小进行拆分,现在需要按我即将添加此新字段的字符分支字段进行拆分。

'previous header
    Date|Field_2|Field_3|Field_4|Field_5|Field_6|Field_7|Field_8|Field_9|Field_10|Field_11|Field_12|Field_13|Field_14|Field_15|Field_16|Field_17|Field_18|Field_19|Field_20|

'after add branch field
Date|Branch|Field_2|Field_3|Field_4|Field_5|Field_6|Field_7|Field_8|Field_9|Field_10|Field_11|Field_12|Field_13|Field_14|Field_15|Field_16|Field_17|Field_18|Field_19|Field_20|


'i used to split use this code:
'got the script from http://prabhuram.com/articles/2012/02/28/splitting-large-files-using-vbscript/

Dim  Counter
Const InputFile = "C:\input.txt"
Const OutputFile = "C:\output"
Const RecordSize = 1000000 
Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile (InputFile, ForReading)
Counter = 0
FileCounter = 0
Set objOutTextFile = Nothing

Do Until objTextFile.AtEndOfStream
    if Counter = 0 Or Counter = RecordSize Then
        Counter = 0
        FileCounter = FileCounter + 1
    if Not objOutTextFile is Nothing then objOutTextFile.Close        
    Set objOutTextFile = objFSO.OpenTextFile( OutputFile & "_" & FileCounter & ".txt", ForWriting, True)
    end if
    strNextLine = objTextFile.Readline
    objOutTextFile.WriteLine(strNextLine)
    Counter = Counter + 1
Loop
objTextFile.Close
objOutTextFile.Close
Msgbox "Done..."

代码通过拆分每个 RecordSize = 1000000 行来 100% 工作,现在我希望通过为分支报告添加新字段(分支)并根据分支代码将大文件拆分为单独的输出文件(示例分支代码: AAA、BBB、CCC、DDD 等)。 输入文件已经按分支排序,所以脚本中不需要更多的排序/排序过程。

一个巨大的 .txt 文件 --> 基于分支代码的单独 .txt 文件,输出文件将是它自己的分支代码。 (对于 exp.:AAA.txt 等等..)。

任何想法,我怎样才能使用 VBscript 完成这个?

【问题讨论】:

  • 如果我将管道的分隔符更改为逗号怎么办?
  • 不,不能更改,因为这是客户要求。还是谢谢你。

标签: text vbscript


【解决方案1】:

您需要写入由您的分支代码标识的多个文件。我可能会使用字典来管理它们,例如像这样:

...

Set outFiles = CreateObject("Scripting.Dictionary")

Do Until objTextFile.AtEndOfStream
  line = objTextFile.ReadLine

  branchCode = Split(line, "|")(1)
  If Not outFiles.Exists(branchCode) Then
    outFiles.Add branchCode, fso.OpenTextFile(outputFile _
      & "_" & branchCode & ".txt", ForWriting, True)
  End If

  outFiles(branchCode).WriteLine line
Loop

For Each branchCode In outFiles.Keys
  outFiles(branchCode).Close
Next

...

根据需要调整输出文件的名称。

【讨论】:

  • 正确/不错的解决方案值得比“无法正常工作”更好。
猜你喜欢
  • 2015-03-24
  • 1970-01-01
  • 1970-01-01
  • 2016-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-28
  • 2012-04-14
相关资源
最近更新 更多