Zmienna typu string ze znakami specjalnymi

0

Cześć,
kiedy mamy string ze znakami specjalnymi i chcemy te znaki specjalne traktowac jak zwykłe znaki to wystarczy postawić @ przed stringiem np. @"foo". Taki sam efekt chciałbym uzyskac ze stringiem zapisanym do zmiennej i tu pojawia się pytanie jak to zrobić.
Ten sposób niestety nie działa:

string foo = "coś tam";
bar(@foo);

Dodam, że nie mogę @ wpisac w momencie deklaracji stringa ponieważ jest on zwracany z metody z biblioteki.

0

Chcesz pozbyć się wszystkich specjalnych znaków ze stringa, czy zamienić np. '\t' na 't'?

0

Chcę, żeby np. \n było traktowane jako normalne dwa znaki, a nie jako nowa linia itd. Tak samo jak w przypadku @ przed cudzysłowem.

0

Wiem o co Ci chodzi ale nie wychodzi mi odtworzenia takiego scenariusza.
Zapisałem na dysku plik tekstowy o takiej zawartości:

aaaa\nbbb\n111\t222

W programie wklepałem:

string text = System.IO.File.ReadAllText(@"e:\test.txt");         
richTextBox1.Text += text;
richTextBox2.Text += "aaaa\nbbb\n111\t222";

Jako wynik dostaję:
3ecc3a7f05.png
czyli w odczytanym z pliku tekście program pominął \n i \t

Za to na SO proponują:
http://stackoverflow.com/questions/323640/can-i-convert-a-c-sharp-string-value-to-an-escaped-string-literal

0

Wydaje mi się, że nie masz innego wyjścia niż po prostu zamienić te wszystkie znaki, np. tak: .Replace("\n", "\\n").

0

@hipekk
Sytuacja do odtworzenia dość prosta:

            Console.WriteLine("\n"); //output: nowa linia
            Console.WriteLine(@"\n"); //output: \n
            String myString = "\n";
            Console.WriteLine(myString); //output: nowa linia
            Console.WriteLine(ToLiteral(myString)); //output: "\n" (to jest rozwiązanie które podałeś z SO, prawie działa, tylko te cudzysłwy są zbędne)

@somekind
Może być dość ciężko to tak zastąpić, bo te stringi wyglądają mniej więcej tak: class=""filmTitle gwt-filmPage"">\s*(.+?)\s*</a>

To są stringi, które wstawiam do Regex.Matches jako argument pattern

1
Złoty Kot napisał(a):

Może być dość ciężko to tak zastąpić, bo te stringi wyglądają mniej więcej tak: class=""filmTitle gwt-filmPage"">\s*(.+?)\s*</a>

Nie rozumiem na czym konkretnie polega problem przy zamianie?

Tak czy siak, to co zapisujesz jako @"\n" możesz alternatywnie zapisać jako "\\n" (po prostu escapujesz backslasha, żeby nie był backslashem escapującym tylko widzialnym, wtedy nie działa na literkę za nim).

0

Działa, dziękuje Wam za pomoc

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