La recherche de C# équivalent de scanf
J'ai utilisé de code en langage C, dans le passé, et j'ai trouvé le scanf
fonction très utile.
Malheureusement, il n'y a pas d'équivalent en C#.
Je suis à l'aide de l'utiliser pour analyser semi-structuré de fichiers texte.
J'ai trouvé un intéressant exemple de scanf
mise en œuvre ici. Malheureusement, il semble vieux et incomplète.
Que quelqu'un connait un scanf
C# de mise en œuvre ? Ou au moins quelque chose qui pourrait fonctionner comme une inversion de la string.Format
?
Vous devez vous connecter pour publier un commentaire.
Si les expressions régulières ne fonctionnent pas pour vous, j'ai juste posté un
sscanf()
de remplacement pour .NET. Le code peut être consulté et téléchargé à http://www.blackbeltcoder.com/Articles/strings/a-sscanf-replacement-for-net.Étant donné que les fichiers sont "semi-structurées" ne pouvez-vous pas utiliser une combinaison de ReadLine() et TryParse() les méthodes, ou de la classe Regex pour analyser vos données?
Vous pouvez utiliser scanf directement à partir de bibliothèques runtime C, mais cela peut être difficile si vous avez besoin de le faire fonctionner avec différents paramètres de comptage. Je vous recommande d'expressions régulières pour vous la tâche ou de décrire la tâche ici, peut-être il ya une autre façons.
J'ai trouvé une meilleure solution que d'utiliser sscanf de C ou de certains réécrit en partie par quelqu'un (en l'absence d'infraction)
http://msdn.microsoft.com/en-us/library/63ew9az0.aspx
jetez un oeil à cet article, il explique comment faire des groupes nommés pour extraire les données à partir d'un motif de chaîne. Méfiez-vous de la petite erreur dans l'article et la meilleure version ci-dessous. (le colon ne faisait pas partie du groupe)
http::8080
, quand je l'ai tester.Vous pouvez importer msvcrt.dll.
Il fonctionne bien sous .net framework,toutefois, de ne pas sous Mono. Il affiche le message d'erreur:
D'une autre manière qui fonctionne bien dans les deux .net framework et mono est de ne pas utiliser
arglist
.Mais cette méthode est plus limitée.
Modifier 2018-5-24
L'ancien chemin qui utilise
arglist
ne fonctionne pas sous .net de base. Il semble que l'appel de la C-style vararg fonction est considérée comme mauvaise. Vous devez utiliser l' .net bibliothèque commestring.format
à la place.Il y a une bonne raison pourquoi un scanf comme la fonction est manquante à partir de c#. Il est très sujettes à l'erreur, et non flexible. En utilisant les Regex est beaucoup plus puissant et plus souple.
Un autre avantage est qu'il est plus facile de réutiliser tout au long de votre code si vous avez besoin d'analyser la même chose dans différentes parties du code.
Je pense que vous voulez le C# des fonctions de la bibliothèque, soit d'Analyser ou de les Convertir.
Vous pouvez utiliser le Système.IO.FileStream, et du Système.IO.StreamReader, et ensuite d'analyser à partir de là.
Bien que cela ressemble sorte de brut il ne faire le travail:
Vous pouvez ensuite utiliser le tableau srVals que des variables de l'enregistrement.
var srVals = srRec.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
pour plus d'un comportement prévisible. Mais cela mis à part, ce n'est pas vraiment répondre à la question.