split mit Hochkomma und dieses Trimmen

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    split mit Hochkomma und dieses Trimmen

    Moin!

    ich habe eine etwas merkwürdige Betreffzeile - aber leider ist mir nichts besseres eingefallen.

    Es geht darum, dass ich folgende Datenzeile habe.

    "8";;1_8;" 45";C;Crataegus;"Crataegus spec.; Weißdorn";1.00;14.00;"0";;;Strassengrün;Zentralklärwerk;sozialgebäude;"4";"5";"2018";;;;;ZKW;;; ;


    Diese Zeile wird an den ";" aufgetrennt.


    VB.NET-Quellcode

    1. Dim Zeile() As String = Zeilen(i).Split({";"}, StringSplitOptions.RemoveEmptyEntries)


    Nun will ich die Werte abarbeiten und einige sind in dem oberen String noch mit Hochkomma gekennzeichnet.

    Ich habe den Index, den ich weiterverarbeiten will ermittelt und greife mir diesen aus der Zeile raus.

    Aber merkwürdigerweise wird der Wert manchmal mehr Hochkomma in der Debug-Zeile angezeigt als erwartet.



    Bei den vielen Hochkomma kommt es aber zu einem Fehler bei clng oder auch bei convert.ToInt().

    Kann mir einer weiterhelfen?

    Jan
    Hallo,
    du möchtest natürlich einen Regex dafür verwenden. Ich habe folgendes auf die Schnelle bei Stackoverflow gefunden. Hier ein angepasstes Beispiel mit deiner bereitgestellten Zeile:

    C#-Quellcode

    1. string line = "\"8\";;1_8;\" 45\";C;Crataegus;\"Crataegus spec.; Weißdorn\";1.00;14.00;\"0\";;;Strassengrün;Zentralklärwerk;sozialgebäude;\"4\";\"5\";\"2018\";;;;;ZKW;;; ;";
    2. Regex r = new(@"
    3. # Parse CVS line. Capture next value in named group: 'val'
    4. \s* # Ignore leading whitespace.
    5. (?: # Group of value alternatives.
    6. "" # Either a double quoted string,
    7. (?<val> # Capture contents between quotes.
    8. [^""]*(""""[^""]*)* # Zero or more non-quotes, allowing
    9. ) # doubled "" quotes within string.
    10. ""\s* # Ignore whitespace following quote.
    11. | (?<val>[^;]*) # Or... zero or more non-commas.
    12. ) # End value alternatives group.
    13. (?:;|$) # Match end is comma or EOS",
    14. RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace);
    15. List<string> resultList = new();
    16. var m = r.Match(line);
    17. while (m.Success)
    18. {
    19. resultList.Add(m.Groups["val"].Value);
    20. m = m.NextMatch();
    21. }

    Inhalt der Liste:
    Moin!

    erst einmal danke - aber irgendwie klingt die Convertierung nach VB nicht vielversprechend.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub SurroundingSub()
    2. Dim line As String = """8"";;1_8;"" 45"";C;Crataegus;""Crataegus spec.; Weißdorn"";1.00;14.00;""0"";;;Strassengrün;Zentralklärwerk;sozialgebäude;""4"";""5"";""2018"";;;;;ZKW;;; ;"
    3. ''' Cannot convert LocalDeclarationStatementSyntax, CONVERSION ERROR: Conversion for TupleType not implemented, please report this issue in '(' at character 240
    4. ''' at ICSharpCode.CodeConverter.VB.NodesVisitor.DefaultVisit(SyntaxNode node)
    5. ''' at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor`1.VisitTupleType(TupleTypeSyntax node)
    6. ''' at Microsoft.CodeAnalysis.CSharp.Syntax.TupleTypeSyntax.Accept[TResult](CSharpSyntaxVisitor`1 visitor)
    7. ''' at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor`1.Visit(SyntaxNode node)
    8. ''' at ICSharpCode.CodeConverter.VB.CommentConvertingNodesVisitor.DefaultVisit(SyntaxNode node)
    9. ''' at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor`1.VisitTupleType(TupleTypeSyntax node)
    10. ''' at Microsoft.CodeAnalysis.CSharp.Syntax.TupleTypeSyntax.Accept[TResult](CSharpSyntaxVisitor`1 visitor)
    11. ''' at ICSharpCode.CodeConverter.VB.NodesVisitor.VisitObjectCreationExpression(ObjectCreationExpressionSyntax node)
    12. ''' at Microsoft.CodeAnalysis.CSharp.Syntax.ObjectCreationExpressionSyntax.Accept[TResult](CSharpSyntaxVisitor`1 visitor)
    13. ''' at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor`1.Visit(SyntaxNode node)
    14. ''' at ICSharpCode.CodeConverter.VB.CommentConvertingNodesVisitor.DefaultVisit(SyntaxNode node)
    15. ''' at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor`1.VisitObjectCreationExpression(ObjectCreationExpressionSyntax node)
    16. ''' at Microsoft.CodeAnalysis.CSharp.Syntax.ObjectCreationExpressionSyntax.Accept[TResult](CSharpSyntaxVisitor`1 visitor)
    17. ''' at ICSharpCode.CodeConverter.VB.CommonConversions.ConvertTopLevelExpression(ExpressionSyntax topLevelExpression)
    18. ''' at ICSharpCode.CodeConverter.VB.CommonConversions.RemodelVariableDeclaration(VariableDeclarationSyntax declaration)
    19. ''' at ICSharpCode.CodeConverter.VB.MethodBodyVisitor.VisitLocalDeclarationStatement(LocalDeclarationStatementSyntax node)
    20. ''' at Microsoft.CodeAnalysis.CSharp.Syntax.LocalDeclarationStatementSyntax.Accept[TResult](CSharpSyntaxVisitor`1 visitor)
    21. ''' at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor`1.Visit(SyntaxNode node)
    22. ''' at ICSharpCode.CodeConverter.VB.CommentConvertingMethodBodyVisitor.ConvertWithTrivia(SyntaxNode node)
    23. ''' at ICSharpCode.CodeConverter.VB.CommentConvertingMethodBodyVisitor.DefaultVisit(SyntaxNode node)
    24. '''
    25. ''' Input:
    26. ''' Regex r = new(
    27. ''' "
    28. # Parse CVS line. Capture next value in named group: 'val'
    29. \s* # Ignore leading whitespace.
    30. (?: # Group of value alternatives.
    31. "" # Either a double quoted string,
    32. (?<val> # Capture contents between quotes.
    33. [^""]*(""""[^""]*)* # Zero or more non-quotes, allowing
    34. ) # doubled "" quotes within string.
    35. ""\s* # Ignore whitespace following quote.
    36. | (?<val>[^;]*) # Or... zero or more non-commas.
    37. ) # End value alternatives group.
    38. (?:;|$) # Match end is comma or EOS"
    39. RegexOptions.Multiline Or RegexOptions.IgnorePatternWhitespace
    40. ''' Cannot convert LocalDeclarationStatementSyntax, CONVERSION ERROR: Conversion for TupleType not implemented, please report this issue in '()' at character 1069
    41. ''' at ICSharpCode.CodeConverter.VB.NodesVisitor.DefaultVisit(SyntaxNode node)
    42. ''' at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor`1.VisitTupleType(TupleTypeSyntax node)
    43. ''' at Microsoft.CodeAnalysis.CSharp.Syntax.TupleTypeSyntax.Accept[TResult](CSharpSyntaxVisitor`1 visitor)
    44. ''' at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor`1.Visit(SyntaxNode node)
    45. ''' at ICSharpCode.CodeConverter.VB.CommentConvertingNodesVisitor.DefaultVisit(SyntaxNode node)
    46. ''' at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor`1.VisitTupleType(TupleTypeSyntax node)
    47. ''' at Microsoft.CodeAnalysis.CSharp.Syntax.TupleTypeSyntax.Accept[TResult](CSharpSyntaxVisitor`1 visitor)
    48. ''' at ICSharpCode.CodeConverter.VB.NodesVisitor.VisitObjectCreationExpression(ObjectCreationExpressionSyntax node)
    49. ''' at Microsoft.CodeAnalysis.CSharp.Syntax.ObjectCreationExpressionSyntax.Accept[TResult](CSharpSyntaxVisitor`1 visitor)
    50. ''' at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor`1.Visit(SyntaxNode node)
    51. ''' at ICSharpCode.CodeConverter.VB.CommentConvertingNodesVisitor.DefaultVisit(SyntaxNode node)
    52. ''' at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor`1.VisitObjectCreationExpression(ObjectCreationExpressionSyntax node)
    53. ''' at Microsoft.CodeAnalysis.CSharp.Syntax.ObjectCreationExpressionSyntax.Accept[TResult](CSharpSyntaxVisitor`1 visitor)
    54. ''' at ICSharpCode.CodeConverter.VB.CommonConversions.ConvertTopLevelExpression(ExpressionSyntax topLevelExpression)
    55. ''' at ICSharpCode.CodeConverter.VB.CommonConversions.RemodelVariableDeclaration(VariableDeclarationSyntax declaration)
    56. ''' at ICSharpCode.CodeConverter.VB.MethodBodyVisitor.VisitLocalDeclarationStatement(LocalDeclarationStatementSyntax node)
    57. ''' at Microsoft.CodeAnalysis.CSharp.Syntax.LocalDeclarationStatementSyntax.Accept[TResult](CSharpSyntaxVisitor`1 visitor)
    58. ''' at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor`1.Visit(SyntaxNode node)
    59. ''' at ICSharpCode.CodeConverter.VB.CommentConvertingMethodBodyVisitor.ConvertWithTrivia(SyntaxNode node)
    60. ''' at ICSharpCode.CodeConverter.VB.CommentConvertingMethodBodyVisitor.DefaultVisit(SyntaxNode node)
    61. '''
    62. ''' Input:
    63. '''
    64. List<string> resultList = new();
    65. '''
    66. Dim m = r.Match(line)
    67. While m.Success
    68. resultList.Add(m.Groups("val").Value)
    69. m = m.NextMatch()
    70. End While
    71. End Sub



    Jan

    jan99 schrieb:

    Bei den vielen Hochkomma kommt es aber zu einem Fehler bei clng oder auch bei convert.ToInt().
    Warum nicht so:

    VB.NET-Quellcode

    1. Dim txt2 = txt.Replace "'", "")
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Interessant wär zu wissen, mit welchem Code was jetzt für ein Fehler auftritt. Denn der schmale Screenshot in Post#1 lässt irgendwas vermuten wie:

    VB.NET-Quellcode

    1. Dim Text = """ 5"""
    2. Dim TextOhneAnführungszeichen = Text.Trim(Char(34)) 'leider nicht besser lesbar, aber wär ne mir unbekannte Funktion


    So würde man zumindest einen Schritt weiterkommen:

    VB.NET-Quellcode

    1. Dim Text = """ 5"""
    2. Dim TextOhneAnführungszeichen = Text.Trim(Microsoft.VisualBasic.Chr(34))
    3. Dim TextOhneAnführungszeichenUndLeerzeichen = TextOhneAnführungszeichen.Trim
    4. Dim TextAlsZahl = Integer.Parse(TextOhneAnführungszeichenUndLeerzeichen)
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.