Zamiana znaków w ciągu

0

Na wstępnie witam wszystkich.

Jako, że dopiero od niedawna interesuję się tematyką związaną z C# i .NET, no i mam pewną zagwostkę. Mam w tabeli dwie kolumny: Title i StrippedTitle, tak aby przechowywały odpowiednio np.: "Temat pierwszy" i "temat-pierwszy". Będzie mi to potrzebne kiedy zacznę się kręcić wokół mod_rewrite (póki co zajmowałem się tym pod php).

Napisałem metodę która zamienia mi polskie znaki specjalne na zwykłe i spacje na znak "-". Próbowałem wcześniej walczyć z klasą Regex i metodą Replace, ale coś nie dawałem rady. Metoda w takiej postaci jak poniżej działa, ale zakładam, że można to zrobić lepiej, bardziej profesjonalnie. Pomożecie?

private string StripText(string title)
{
    string input = title.Trim().ToLower();
    string tmp = input.Replace("ą", "a");
    tmp = tmp.Replace("ć", "c");
    tmp = tmp.Replace("ę", "e");
    tmp = tmp.Replace("ł", "l");
    tmp = tmp.Replace("ń", "n");
    tmp = tmp.Replace("ó", "o");
    tmp = tmp.Replace("ś", "s");
    tmp = tmp.Replace("ź", "z");
    tmp = tmp.Replace("ż", "z");
    string output = tmp.Replace(" ", "-");
    return output;
}

Druga sprawa, zanim zacznę szukać informacji na temat mod-rewrite pod .NET, czy tego typu metody (jak ta powyżej) wraz z przechowywaniem nowego ciągu w kolejnej kolumnie bazy są konieczne? Czy pod .NET powinno robić się to w inny sposób?

0

Sposób dobry, równie dobrze możesz bawić się z przestawianiem kodów ASCII bądź tworzysz 2 tablice dwuwymiarowe(bądź jedno) i odpowiednio przypisujesz sobie znaki potem tylko pętla for

for(int i=0; i<=tablica x;i++)
    for(int j=0;j<=tablica y;j++)
      text.Replace(tablica[i][j],tablica2[i][j]);

tablica x - wysokość tablicy
tablica y - szerokość tablicy

:)

0

Dzięki, przerobiłem to na jedną tablicę dwuwymiarową i skorzystałem z for.

0
Autor napisał(a)

tworzysz 2 tablice dwuwymiarowe(bądź jedno) i odpowiednio przypisujesz sobie znaki potem tylko pętla for

for(int i=0; i<=tablica x;i++)
    for(int j=0;j<=tablica y;j++)
      text.Replace(tablica[i][j],tablica2[i][j]);

Tylko, że to jest tablica tablic, a nie tablica dwuwymiarowa.

0

Dobra, za dużo c++

for(int i=0; i<=tablica x;i++)
    for(int j=0;j<=tablica y;j++)
      text.Replace(tablica[i,j],tablica2[i,j]);

Chyba można było się domyślić o co chodzi;)

0

Ja mogłem, ale warto wiedzieć i rozróżniać te dwie rzeczy.

0

Generalnie zrobiłem to tak:

public static string StripText(string title)
{
    string output = title.Trim();
    string[,] znakiSpecjalne = {
    { "Ą", "A" }, { "Ć", "C" }, { "Ę", "E" }, { "Ł", "L" }, { "Ń", "N" }, { "Ó", "O" }, { "Ś", "S" }, { "Ź", "Z" }, { "Ż", "Z" }, 
    { "ą", "a" }, { "ć", "c" }, { "ę", "e" }, { "ł", "l" }, { "ń", "n" }, { "ó", "o" }, { "ś", "s" }, { "ź", "z" }, { "ż", "z" }, 
    { " ", "-" },
    };
    for (int i = 0; i < znakiSpecjalne.GetLength(0); i++)
    {
        output = output.Replace(znakiSpecjalne[i, 0], znakiSpecjalne[i, 1]);
    }

    return output;
}
1
 public static string RemoveAccent(string txt)
        {
            byte[] bytes = System.Text.Encoding.GetEncoding("Cyrillic").GetBytes(txt);
            return System.Text.Encoding.ASCII.GetString(bytes);
        }

1 użytkowników online, w tym zalogowanych: 0, gości: 1