Duplicata possible:
Existe-t-il un équivalent de 'sscanf ()' dans .NET?
sscanf en C est une bonne façon de lire une entrée bien formatée à partir d'une chaîne.
Comment atteindre ce C #.
Par exemple,
int a,b;
char *str= "10 12";
sscanf(str,"%d %d",&a,&b);
Le code ci-dessus attribuera 10 à a et 12 à b.
Comment obtenir la même chose en utilisant C #?
Il n'y a pas d'équivalent direct en C #. Étant donné la même tâche en C #, vous pouvez le faire quelque chose comme ceci:
string str = "10 12";
var parts = str.Split(' ');
int a = Convert.ToInt32(parts[0]);
int b = Convert.ToInt32(parts[1]);
En fonction de la bonne forme que vous pouvez supposer que l'entrée est, vous pouvez ajouter des vérifications d'erreur.
Il n'y a pas d'équivalent direct de sscanf
dans le .NET Framework.
La façon la plus simple d'obtenir la même fonctionnalité consiste à fractionner la chaîne ( String.Split
) puis en affectant les parties suivantes aux variables avec le Int32.Parse
méthode. Par exemple:
string myString = "10, 12";
string[] stringValues = myString.Split(new char[] {' '}, StringSplitOptions.RemoveEmptyEntries);
int a = Int32.Parse(stringValues[0]);
int b = Int32.Parse(stringValues[1]);
De nombreux types de données différents dans le Framework ont des méthodes Parse
, y compris des énumérations, si les valeurs que vous souhaitez lire dans la chaîne ne sont pas nécessairement des valeurs entières.
Vous pouvez également utiliser expressions régulières , mais ils sont probablement un peu exagérés pour une tâche aussi simple que celle-ci.
EDIT: Si vous êtes vraiment découragé d'utiliser sscanf
, vous pouvez toujours envisager P/Invoquer la fonction les bibliothèques d'exécution C. Quelque chose comme ça peut-être (non testé):
[DllImport("msvcrt.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern int sscanf(string buffer, string format, ref int arg0, ref int arg1);
J'écris juste pour tuer le temps.
public static unsafe void Main(string[] args)
{
int a, b,c;
string str = "10 12 100";
sscanf(str, ' ', &a, &b, &c);
Console.WriteLine("{0} {1} {2}", a, b, c);
Console.Read();
}
public static unsafe void sscanf(string str, char seperator, params int*[] targets)
{
var parts = str.Split(seperator);
if (parts.Length != targets.Length) throw new ArgumentException();
for (int i = 0; i < parts.Length; i++)
{
*targets[i] = int.Parse(parts[i]);
}
}
Écrire votre propre méthode sscanf()
en C # n'est pas si difficile, si cela ne vous dérange pas d'écrire un peu de code de bas niveau.
Vous pouvez voir ma version dans l'article n remplacement sscanf () pour .NET .
de routines d'exécution et équivalents .NET Framework
sscanf, swscanf ==> Voir Méthodes d'analyse, telles que System.Double.Parse
Donc, je suppose qu'il n'y a pas d'équivalent direct.