vb.net 如何拆分文本文件

vb.net how to split text file

我有一个包含逗号分隔行的文件,如下所示:

PS23456789,08/2023,2011,LAM CHIUE MONG JP
sdad,08/2023,2011,LAM CHIUE MONG JP
xvczxcssf,08/2023,2011,LAM CHIUE MONG JP
42432,08/2023,2011,LAM CHIUE MONG JP
fdsafs,08/2023,2011,LAM CHIUE MONG JP

我想将此数据转换为固定长度值且没有逗号,如下所示:

PS23456789   08/2023   2011   LAM CHIUE MONG JP
sdad         08/2023   2011   LAM CHIUE MONG JP
xvczxcssf    08/2023   2011   LAM CHIUE MONG JP
42432        08/2023   2011   LAM CHIUE MONG JP
fdsafs       08/2023   2011   LAM CHIUE MONG JP

不幸的是,我只能让第一行看起来正确。其他的不工作。这是它的样子:

PS23456789   08/2023   2011   LAM CHIUE MONG JP
sdad08/2023   2011   LAM CHIUE MONG JP
xvczxcssf08/2023   2011   LAM CHIUE MONG JP
4243208/2023   2011   LAM CHIUE MONG JP
fdsafs08/2023   2011   LAM CHIUE MONG JP

这是我的代码:

Dim splitFile = File.ReadAllText(Result).Split(",")
For count = 0 To splitFile.Length - 1
    While (splitFile(count).Length < 20)
        splitFile(count) = splitFile(count) + " "
    End While
    totalFile += splitFile(count)
Next
My.Computer.FileSystem.WriteAllText("C:test.txt", totalFile, False)

我该如何解决这个问题?

这应该如你所愿:

''' <summary>
''' Removes delimiters from a file and makes all but the last column a fixed width.
''' </summary>
''' <param name="inputFilePath">
''' The path of the input file.
''' </param>
''' <param name="outputFilePath">
''' The path of the output file. Can be the same as the input file.
''' </param>
''' <param name="delimiter">
''' The field delimiter in the input file.
''' </param>
''' <param name="fieldWidth">
''' The width of the columns in the output file.
''' </param>
Private Sub MakeDelimitedFileFixedWidth(inputFilePath As String,
                                        outputFilePath As String,
                                        delimiter As String,
                                        fieldWidth As Integer)
    'The lines to write to the output file.
    Dim outputLines As New List(Of String)

    For Each line In File.ReadLines(inputFilePath)
        'Split the existing line on the delimiter.
        Dim fields = line.Split({delimiter}, StringSplitOptions.None)

        'Pad all but the last column to the specified width.
        For i = 0 To fields.Length - 2
            fields(i) = fields(i).PadRight(fieldWidth)
        Next

        outputLines.Add(String.Concat(fields))
    Next

    'Write out the processed data.
    File.WriteAllLines(outputFilePath, outputLines)
End Sub

这不会填充最后一列。如果需要,请将 fields.Length - 2 更改为 fields.Length - 1fields.GetUpperBound(0).

在你的情况下,你可以这样称呼它:

MakeDelimitedFileFixedWidth(Result, "C:test.txt", ",", 20)

虽然我没有详细检查您现有的代码,但问题可能是您将现有数据作为单个块读取,然后在分隔符上将其拆分。这意味着您会将一行中的最后一个字段和下一行中的第一个字段一起作为一个值。这会对您的字段长度计算造成严重破坏。我提供的代码是逐行读取现有数据,所以这个问题不存在。

我认为那是因为您正在阅读所有的行作为一个整体。每行的结尾应该是一个\n符号,因此第一行的最后一个字符串不能与第二行的第一个字符串分开。连接的字符串比您定义的长度(即 20)长,因此没有添加 space。您应该逐行读取文件并分别处理每一行。

顺便说一句,要添加尾随 space 以获得固定长度的字符串,您可能想尝试 String.Format,它的性能要好得多。 Check ref here. 示例: String.Format({0:-20}, splitFile(count))