2014-03-13 20 views
2

我有輸入和獲取值的問題。輸入要求我輸入借項金額和備註,如果有多個項目要輸入,我總是可以添加一行。我現在遇到的問題是默認分隔符是逗號,我的備註字段也包含逗號。因此,備註分割不正確。在vb.net的每行輸入中添加分隔符

E.g.

Row   Code    Amount   Remarks 
---------------------------------------------------------------------------------------- 
1    LPENALTY   200.00   Late payment penalty, 13Mar2014 
2    CURFEE    1200.00   Additional items 
3    PROCFEE    150.00   Processing fee undercharged, was previously charged 100.00 only 

我是從這些輸入得到的報告是:

LPENALTY  200.00  Late payment penalty 
CURFEE  1200.00  13Mar2014 
PROCFEE  150.00  Additional items 

我有如下聲明和分配:

Dim strCodeArr() As String 
Dim strDebitArr() As String 
Dim strRemarksArr() As String 

    strCodeArr = Split(Request("FeeCode"), ",") 
strRemarksArr = Split(Request("Remarks"), ",") 
strDebitArr = Split(Request("Debit"), ",") 

.. 
.. 
.. 
.. 
      For i = 0 To UBound(strDebitArr) 
       If strDebitArr(i) <> "" Then 
        objAcc.AccountItems(x).Code = CDec(strCodeArr(i)) 
        objAcc.AccountItems(x).Amount = CDec(strDebitArr(i)) 
        objAcc.AccountItems(x).Remarks = strRemarksArr(i) 

        x = x + 1 
       End If 
      Next 
.. 
.. 
.. 

誰能幫助?

+0

你能告訴你如何輸入您的原始數據。 –

回答

0

如果您檢查拆分中有多少項目,您可以在備註中使用逗號時作出反應。

下面是一個基本功能,要做到這一點,並返回的3項的數組:

Private Function ParseLine(ByVal rowString As String) As String() 

    Dim result(2) As String 
    Dim parsedItems() As String 

    parsedItems = rowString.Split(",") 
    If UBound(parsedItems) = 2 Then 
     ' No commas in remarks 
     result = parsedItems 
    Else 
     result(0) = parsedItems(0) 
     result(1) = parsedItems(1) 
     For index = 2 To UBound(parsedItems) 
      If index > 2 Then 
       ' Prefix with comma (removed in Split) 
       result(2) &= "," 
      End If 

      ' Append each string in split 
      result(2) &= parsedItems(index) 
     Next 
    End If 

    Return result 

End Function 

一個更好的辦法是用引號逗號包圍任何數據,以反映CSV處理。

Late payment penalty, 13Mar2014 --> "Late payment penalty, 13Mar2014" 

然後你就可以創建在一行中運行的CSV解析器,以及在其它應用中重複使用。

你可以去一個更好,使之成爲一個字符串擴展:

Imports System.Runtime.CompilerServices 

Module MyExtensions 

    <Extension()> 
    Public Function ParseCSVLine(ByVal stringValue As String) as String 
     Dim result as String 

     ' Code to parse a single line 

     return result 
    End Sub 

End Module 

這樣每一個字符串變量,現在有一個ParseCSVLine()方法:

For Each rowLine In rowItems 
    Console.WriteLine(rowLine.ParseCSVLine()) 
Next 
0

如果我正確理解你的問題,你有這個輸入數據:

LPENALTY,200.00,Late payment penalty, 13Mar2014 
CURFEE,1200.00,Additional items 
PROCFEE,150.00,Processing fee undercharged, was previously charged 100.00 only 

你想分割逗號,但註釋也有逗號。

所以這將是我的方法。開始與您的數據:

Dim data = New String() _ 
{ _ 
    "LPENALTY,200.00,Late payment penalty, 13Mar2014", _ 
    "CURFEE,1200.00,Additional items", _ 
    "PROCFEE,150.00,Processing fee undercharged, was previously charged 100.00 only" _ 
} 

然後將此查詢:

Dim query = _ 
    From d In data _ 
    Let ds = d.Split(","C) _ 
    Select New With _ 
    { _ 
     .Code = ds(0), _ 
     .Amount = Decimal.Parse(ds(1)), _ 
     .Remarks = String.Join(",", ds.Skip(2)) _ 
    } 

我得到這樣的結果:

results