Преобразовать код символа ASCII в символ в VB.NET - PullRequest
2 голосов
/ 15 июля 2011

У меня есть значение, которое я вытягиваю в строку, которая выглядит следующим образом:

M'arta

Мне нужно иметь его, чтобы перевести числовое значение в фактическое значение, чтобы строка выглядела следующим образом:

M'arta

Любые идеи о том, как сделать это в VB.NET? Вот соответствующая строка кода, которая возвращает этот результат:

Dim occupant as String = GridView1.Rows(e.RowIndex).Cells(2).Text

Ответы [ 4 ]

3 голосов
/ 15 июля 2011

Ниже приведена версия VB (& C #) к вашему запросу. В основном, используйте аргумент MatchEvaluator в методе Regex, чтобы разрешить пользовательский анализ совпадений. В этом случае мы находим любые экземпляры #<1-3_digit_number>, которые мы хотим убрать символом #, и конвертируем десятичный код.

Я добавил второе преобразование в вашу строку (#116) только для целей тестирования. Вы можете изменить это в собственный метод и (не уверен, что он есть у VB) лямбда-выражение, чтобы сделать его универсальным, но я оставлю это до вас.

Версия VB.NET ( DEMO )

Imports System.Text.RegularExpressions

Public Class Test
        Public Shared Sub Main()
                Dim sample As [String] = "M#39ar#116a"

                Dim reg As New Regex("\x23\d{1,3}")
                Console.WriteLine(reg.Replace(sample, New MatchEvaluator(AddressOf ReplaceASCIICode)))
        End Sub

        Public Shared Function ReplaceASCIICode(m As Match) As [String]
                Dim code As Int32 = Int32.Parse(m.Value.Substring(1))
                Return Convert.ToString(ChrW(code))
        End Function
End Class

C # версия ( DEMO )

using System;
using System.Text.RegularExpressions;

public class Test
{
    public static void Main()
    {
        String sample = "M#39ar#116a";

        Regex reg = new Regex(@"\x23\d{1,3}");
        Console.WriteLine(reg.Replace(sample, new MatchEvaluator(ReplaceASCIICode)));
    }

    public static String ReplaceASCIICode(Match m)
    {
        Int32 code = Int32.Parse(m.Value.Substring(1));
        return Convert.ToString((char)code);
    }
}

Для архивации, вот версии, которые поддерживают &#___; ниже:

VB.NET ( DEMO )

Imports System.Text.RegularExpressions

Public Class Test
        Public Shared Sub Main()
                Dim sample As [String] = "M&#39;ar&#116;a"

                Dim reg As New Regex("&#(\d{1,3});")
                Console.WriteLine(reg.Replace(sample, New MatchEvaluator(AddressOf ReplaceASCIICode)))
        End Sub

        Public Shared Function ReplaceASCIICode(m As Match) As [String]
                Dim code As Int32 = Int32.Parse(m.Groups(1).Value)
                Return Convert.ToString(ChrW(code))
        End Function
End Class

C # ( DEMO )

using System;
using System.Text.RegularExpressions;

public class Test
{
        public static void Main()
        {
                String sample = "M&#39;ar&#116;a";

                Regex reg = new Regex(@"&#(\d{1,3});");
                Console.WriteLine(reg.Replace(sample, new MatchEvaluator(ReplaceASCIICode)));
        }

        public static String ReplaceASCIICode(Match m)
        {
                Int32 code = Int32.Parse(m.Groups[1].Value);
                return Convert.ToString((char)code);
        }
}
3 голосов
/ 15 июля 2011

Вы можете проанализировать строку в поисках #digits и затем поместить найденный код с помощью функции ChrW .NET.

1 голос
/ 15 июля 2011

Если вы не знаете регулярное выражение, тогда что-то вроде этого

    Dim idx As Integer = occupant.IndexOf("#")
    If idx <> -1 Then
        idx += 1
        Do While idx < occupant.Length
            If IsNumeric(occupant(idx)) Then
                s &= occupant(idx)
            Else
                Exit Do
            End If
            idx += 1
        Loop
        If s.Length > 0 Then
            s = Convert.ToChar(CInt(s))
        End If
        Stop
    End If

Потребуется небольшая модификация для обработки нескольких экземпляров #.

1 голос
/ 15 июля 2011

Я не знаю VB.NET , но вот решение на C #.Я почти уверен, что вы справитесь с переходом на Visual Basic.

using System;
using System.Text.RegularExpressions;

class Program {
    static void Main(string[] args) {
        String input = "M#39arta";
        String output = Regex.Replace(input, @"#\d\d",  Replace);
        Console.WriteLine(output);
        Console.ReadLine();
    }

    static String Replace(Match match) {
        int charCode = int.Parse(match.Value.Substring(1));
        return ""+ (char)charCode;
    }
}
...