【问题标题】:vb.net: How do i split a delimited file out into separate files depending on the flag i set in the codevb.net:如何根据我在代码中设置的标志将分隔文件拆分为单独的文件
【发布时间】:2013-05-23 17:42:55
【问题描述】:

我有一个管道分隔文件,其中包含多个不同的扁平数据行。

我想根据数据中的第一个字段进行拆分,以便最终得到两个数据文件(一个包含我选择的数据,另一个包含剩余数据)

例如

标记|随机数据|随机数据|随机数据|随机数据|随机数据|随机数据| FLAG1|随机数据|随机数据|随机数据|随机数据|随机数据|随机数据| FLAG2|随机数据|随机数据|随机数据|随机数据|随机数据|随机数据| FLAG1|随机数据|随机数据|随机数据|随机数据|随机数据|随机数据|

因此,带有 FLAG1 的所有数据都将保存在一个文件中,然后其余的 (FLAG2) 将保存在单独的文件中。

到目前为止,我有这个:

Imports System
Imports System.IO

Public Class Form1

    Dim c As Integer

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        Dim Tr As IO.TextReader = System.IO.File.OpenText("C:\Users\gmck\Desktop\TIG DATA\test_1")
        For c As Integer = 0 To 1500

        Next

        If c = 0 Then
            Dim MyFileLine As String = Split(Tr.ReadToEnd(), vbCrLf)(c) & vbCrLf
            Tr.Close()

            Dim TW As System.IO.TextWriter
            'Create a Text file and load it into the TextWriter 
            TW = System.IO.File.CreateText("C:\Users\gmck\Desktop\TIG DATA\test_NEW")
            TW.WriteLine(MyFileLine)
            'Flush the text to the file 
            TW.Flush()
            'Close the File 
            TW.Close()
        End If
    End Sub
End Class

提取第一条记录并将其放入新文件中。我想不出如何让它提取特定标志的所有记录。

欢迎任何帮助。

煤气

【问题讨论】:

  • 没有换行符?输入文件有多大?
  • 输入文件最长可达 15,000 行(大小约为 4mb)
  • 您自己尝试过解决这个问题吗?如果是这样,请发布您尝试过但不起作用的示例。
  • 我没有,我认为这对我来说太过分了:(到目前为止我所做的只是打开文件对话框来抓取文件:(
  • 我设法在这里找到了一些代码,这些代码有点帮助,但并没有完全按照我的意愿去做,所以我已经将它上传到原始帖子中。

标签: vb.net split


【解决方案1】:

试试这个:首先它读取vbcrlf 上的文件拆分以获取文件中的所有行。

然后它遍历行集合,检查它们是以“FLAG1”还是“FLAG2”开头的。根据这种情况,它会写入第一个或第二个文件。

Private Sub Read()
    Dim Tr As IO.TextReader = System.IO.File.OpenText("f:\input.txt")

    Dim rows As String() = Tr.ReadToEnd().Split(vbCrLf)
    Tr.Close()

    Dim TW1 As System.IO.TextWriter
    TW1 = System.IO.File.CreateText("f:\output_1.txt")

    Dim TW2 As System.IO.TextWriter
    TW2 = System.IO.File.CreateText("f:\output_2.txt")

    For Each row As String In rows
        row = row.Trim
        If row.StartsWith("FLAG1") Then
            TW1.WriteLine(row)
        End If

        If row.StartsWith("FLAG2") Then
            TW2.WriteLine(row)
        End If
    Next

    TW1.Flush()
    TW1.Close()

    TW2.Flush()
    TW2.Close()
End Sub

【讨论】:

  • 一条评论:使用语句。他们是你的朋友
  • 这绝对是完美的谢谢 :) 它现在正在输出一个标志,我已经将其余数据输出到第二个文件中:)
  • 修改代码有多难,所以如果我搜索特定的 HEX 位置,它将用我在“FLAG1”或“FLAG2”位置输入的数字替换它?它会从 textreader 变为 bytereader 或类似的东西吗?
猜你喜欢
  • 2023-03-13
  • 2017-11-24
  • 1970-01-01
  • 2016-01-31
  • 1970-01-01
  • 2014-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多