我几个月前写这个剖析行功能VB.NET,也可能是一些对你有用的,它的作品了,如果有文字预选赛,它将拆分基于文本,尽量病如果你想要,可以在未来几分钟内将它转换为C#。
你会为你的文本:
样本”‘的字符串的是,更多的‘文本’制造’12.34,你好“菠萝周日
,你将有一个作为你的strLine中 ,你会设置你的strDataDelimeters = “” ,你会设置你strTextQualifier = “” “”
希望这有助于你出去。
Public Function ParseLine(ByVal strLine As String, Optional ByVal strDataDelimiter As String = "", Optional ByVal strTextQualifier As String = "", Optional ByVal strQualifierSplitter As Char = vbTab) As String()
Try
Dim strField As String = Nothing
Dim strNewLine As String = Nothing
Dim lngChrPos As Integer = 0
Dim bUseQualifier As Boolean = False
Dim bRemobedLastDel As Boolean = False
Dim bEmptyLast As Boolean = False ' Take into account where the line ends in a field delimiter, the ParseLine function should keep that empty field as well.
Dim strList As String()
'TEST,23479234,Just Right 950g,02/04/2006,1234,5678,9999,0000
'TEST,23479234,Just Right 950g,02/04/2006,1234,5678,9999,0000,
'TEST,23479234,Just Right 950g,02/04/2006,1234,,,0000,
'TEST,23479234,Just Right 950g,02/04/2006,1234,5678,9999,,
'TEST,23479234,"Just Right 950g, BO",02/04/2006,,5678,9999,,
'TEST,23479234,"Just Right"" 950g, BO",02/04/2006,,5678,9999,1111,
'TEST23479234 'Kellogg''s Just Right 950g' 02/04/2006 1234 5678 0000 9999
'TEST23479234 '' 02/04/2006 1234 5678 0000 9999
bUseQualifier = strTextQualifier.Length()
'split data based on options..
If bUseQualifier Then
'replace double qualifiers for ease of parsing..
'strLine = strLine.Replace(New String(strTextQualifier, 2), vbTab)
'loop and find each field..
Do Until strLine = Nothing
If strLine.Substring(0, 1) = strTextQualifier Then
'find closing qualifier
lngChrPos = strLine.IndexOf(strTextQualifier, 1)
'check for missing double qualifiers, unclosed qualifiers
Do Until (strLine.Length() - 1) = lngChrPos OrElse lngChrPos = -1 OrElse _
strLine.Substring(lngChrPos + 1, 1) = strDataDelimiter
lngChrPos = strLine.IndexOf(strTextQualifier, lngChrPos + 1)
Loop
'get field from line..
If lngChrPos = -1 Then
strField = strLine.Substring(1)
strLine = vbNullString
Else
strField = strLine.Substring(1, lngChrPos - 1)
If (strLine.Length() - 1) = lngChrPos Then
strLine = vbNullString
Else
strLine = strLine.Substring(lngChrPos + 2)
If strLine = "" Then
bEmptyLast = True
End If
End If
'strField = String.Format("{0}{1}{2}", strTextQualifier, strField, strTextQualifier)
End If
Else
'find next delimiter..
'lngChrPos = InStr(1, strLine, strDataDelimiter)
lngChrPos = strLine.IndexOf(strDataDelimiter)
'get field from line..
If lngChrPos = -1 Then
strField = strLine
strLine = vbNullString
Else
strField = strLine.Substring(0, lngChrPos)
strLine = strLine.Substring(lngChrPos + 1)
If strLine = "" Then
bEmptyLast = True
End If
End If
End If
' Now replace double qualifiers with a single qualifier in the "corrected" string
strField = strField.Replace(New String(strTextQualifier, 2), strTextQualifier)
'restore double qualifiers..
'strField = IIf(strField = vbNullChar, vbNullString, strField)
'strField = Replace$(strField, vbTab, strTextQualifier)
'strField = IIf(strField = vbTab, vbNullString, strField)
'strField = strField.Replace(vbTab, strTextQualifier)
'save field to array..
strNewLine = String.Format("{0}{1}{2}", strNewLine, strQualifierSplitter, strField)
Loop
If bEmptyLast = True Then
strNewLine = String.Format("{0}{1}", strNewLine, strQualifierSplitter)
End If
'trim off first nullchar..
strNewLine = strNewLine.Substring(1)
'split new line..
strList = strNewLine.Split(strQualifierSplitter)
Else
If strLine.Substring(strLine.Length - 1, 1) = strDataDelimiter Then
strLine = strLine.Substring(0)
End If
'no qualifier.. do a simply split..
strList = strLine.Split(strDataDelimiter)
End If
'return result..
Return strList
Catch ex As Exception
Throw New Exception(String.Format("Error Splitting Special String - {0}", ex.Message.ToString()))
End Try
End Function
菠萝星期天! – hunter 2011-04-21 18:01:27
我的示例字符串中有5个引号。我想忽略最后一个没有相应的结束引用。 – 2011-04-21 18:03:59
我将在引号外的所有内容上分割空格和逗号。 – 2011-04-21 18:08:15