2010-03-18 8 views
9

je reçois d'une autre chaîne de classe qui doit être converti en char. Il contient généralement un seul caractère et ce n'est pas un problème. Mais les caractères de contrôle que je reçois comme '\\ n' ou '\\ t'. Existe-t-il des méthodes standard pour convertir ceci en caractère final ou onglet tab ou j'ai besoin de l'analyser moi-même?chaîne Convertir en carboniser

modifier: Désolé, analyseur manger une barre oblique. Je reçois « \\ » t

+0

La classe à partir de laquelle vous recevez la chaîne fait quelque chose de non standard, les caractères ne sont donc plus des caractères de contrôle, ils ont été convertis (sans surprise) en une chaîne littérale plus longue. Vous devrez juste avoir un cas spécial pour les gérer. – rohancragg

+1

cela semble familier !: http://www.infoqu.com/dev/c-programming/weeding-out-control-characters-in-c-30095-1/ – rohancragg

+1

Peut être une question stupide, mais regardez-vous la valeur dans une fenêtre de surveillance? La fenêtre de surveillance ajoutera un \\, alors êtes-vous sûr que la chaîne est "\\ t"? – Geoff

Répondre

3

Nouvelle ligne:

string escapedNewline = @"\\n"; 
string cleanupNewLine = escapedNewline.Replace(@"\\n", Environment.NewLine); 

OU

string cleanupNewLine = escapedNewline.Replace(@"\\n", "\n"); 

Tab:

string escapedTab = @"\\t"; 
string cleanupTab= escapedTab.Replace(@"\\t", "\t"); 

Notez l'absence de la chaîne littérale (par exemple je n'ai pas utilisé @ "\ t" parce que qui ne représenteront pas un onglet)

Vous pouvez également envisager Regular Expressions si vous devez remplacer une plage de différents modèles de chaîne.

Vous devriez probablement écrire une fonction d'utilité pour encapsuler le comportement commun au-dessus de tous les possibles Escape Sequences

Ensuite, vous écririez une Unit Tests pour couvrir chacun des cas, vous pouvez penser.

Comme vous rencontrez des bugs que vous ajouter d'autres tests unitaires pour couvrir les cas.

MISE À JOUR

Vous pouvez représenter un onglet dans le fichier XML avec une séquence de caractères spéciaux:

	see this article

This article applique à SQL Server, mais peut-être pertinent pour C# aussi? Pour être absolument sûr, vous pouvez essayer de générer une chaîne avec un onglet et le mettre en XML (par programmation) et en utilisant XmlSerializer pour sérialiser ce fichier dans un fichier pour voir ce que la sortie est, alors vous pouvez être sûr que cela va fidèlement 'aller-retour' la corde avec l'onglet toujours dedans.

+0

Il semble que ce n'est qu'une variante disponible. –

17

Je suppose que vous voulez dire que la classe qui vous envoie les données vous envoie une chaîne comme « \ n ». Dans ce cas, vous devez analyser vous-même en utilisant:

Char.Parse(returnedChar) 

Sinon, vous pouvez simplement le jeter à une chaîne comme celui-ci

(string)returnedChar 
+0

Cette classe le lit à partir du fichier. Donc, si le fichier contient \ n je reçois \\ n c'est mon problème. –

5

comment sur l'utilisation string.ToCharArray()

Vous pouvez ensuite ajouter le approprié logique pour traiter tout ce qui était dans la chaîne.

1

char.parse (string); est utilisé pour convertir la chaîne en caractère et vous pouvez le faire vice versa char.tostring(); 100% résolu