[英]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.