簡體   English   中英

VB.NET字符串預先分割(C#或VB.NET)

[英]VB.NET String split in advance (C# or VB.NET)

這是我要拆分的文本行,data.txt(一些文本文件)

AAEJEY CONSUMER COMPANY                    61469 HH13811 4796000501758   NILMA LIQUID BLUE                240 75ML         960.00  20131002
EVERGREEN MARKETING                        61485 PC21946 3014260818685   ORALB 7 BENEFITS T/BRUSH          12 EACH         120.00  20131002
HARISCHANDRA MILLS PLC                     61488 BV50201 4792083040122   HARISCHANDRA COFFEE               40 50GR        4000.00  20131002

在“ COMPANY”和“ 61469”之間,行長度可能會有所不同。 我想按以下方式拆分該行。

AAEJEY消費者公司

61469

HH13811

4796000501758

尼瑪液體藍

240

75ML

960.00

20131002

這是我的代碼,它全部用空格分開,但是我不能將公司名稱(AAEJEY CONSUMER COMPANY)作為一個單一名稱或將項目名稱(NILMA LIQUID BLUE)作為一個單一名稱。

Dim myArray() As String, delimiter As Char = " "
        Dim strBuild As String = ""
        Dim b As Boolean = False
        Dim i As Integer = 0
        Try
            Using sr As New StreamReader(fileName)
                Dim line As String
                While Not sr.EndOfStream
                    line = sr.ReadLine()
                    Console.WriteLine(line)
                    myArray = line.Split(delimiter)
                    Dim order As New OrdData()
                    For index As Integer = 0 To myArray.Length - 1
                        If myArray(index) = "" Then
                            i = index
                            myArray.Skip(1)                                
                        Else                               
                            strBuild += myArray(index) + " "
                            Console.WriteLine(strBuild)
                        End If

                    Next
                End While
            End Using
        Catch e As Exception
            Console.WriteLine("The file could not be read:")
            Console.WriteLine(e.Message)
        End Try

看起來您具有固定長度的文件格式,因此實際上應該按字符數進行操作,例如

line = sr.ReadLine()
var name = line.Substring(0, 43).Trim();
var number = line.Substring(44, 5).Trim();

您的文件沒有任何定界符。 您不能使用空格,因為空格是項目的一部分(第一列)。

您可以嘗試這種方便的功能方法。

首先定義一個函數以遞歸方式分割一條線:

Dim f As Func(Of String, IEnumerable(Of Integer), IEnumerable(Of String)) = Nothing
f = Function(t, ns)
    If ns.Any() Then
        Dim n = ns.First()
        Dim i = System.Math.Min(n, t.Length)
        Dim t0 = t.Substring(0, i)
        Dim t1 = t.Substring(i)
        Return New List(Of String) From { t0.Trim() }.Concat(f(t1, ns.Skip(1)))
    Else
        Return New List(Of String) From { t.Trim() }
    End If
End Function

然后像這樣定義拆分:

Dim splits = { 43, 6, 8, 16, 31, 6, 10, 11 }

現在您可以像這樣運行它:

Dim fields = f(line, splits).ToArray()

根據您的第一行數據,我得到了以下結果:

結果

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM