¿Hay un mono (.Net) equivalente a la clase escáner en Java
-
18-09-2019 - |
Pregunta
En Java hay una clase agradable llamado escáner para la lectura de cuerdas y corrientes de un determinado formato a estructuras de datos como números enteros, flotadores, ... ¿Hay alguna equivalente en Mono? En .Net existe un binario-lector, pero lee los datos como archivos binarios. Quiero una clase que lea los datos mediante el análisis desde una cadena.
EDIT: reacción en las respuestas actuales, sé que la mayoría de los tipos de datos tienen un análisis sintáctico-método, pero el problema con estos son, no leen secuencialmente la cadena. En Java sólo tiene que inicializar el objeto, y mediante la activación de los métodos, se lee secuencialmente los tipos de datos.
Solución
Bueno, ya que está leyendo un archivo en de casos de prueba, voy a asumir que usted conoce el formato exacto de los datos que entran y cómo tiene que ser analizada. En cuanto a la clase de Java Parser
en la documentación no hacer que se vea muy complicado o mucho más que una clase de conveniencia. Parece que acaba de tokenize la cadena de flujo de espacios y proporcionar funciones para tomar el testigo y analizarlo. Y por lo que yo sé, .Net no tiene una clase equivalente. Así que si quieres uno para su reutilización, a continuación, tendrá que escribir uno mismo.
Sin embargo, el algoritmo básico que necesita es leer el contenido del archivo, dividir las fichas, y analizarlos. Si el archivo es de un tamaño razonable, podría utilizar File.ReadAllLines()
el que lee el contenido de la línea por línea en un archivo de String[]
. O puede utilizar una clase StreamReader
para leer las líneas de una en una utilizando su ReadLine()
. Luego, una vez que los tiene en una línea, que le tokenize con String
de Split()
, y luego analizarlos.
Sin saber exactamente cómo tiene que utilizar los valores en el archivo, un patrón muy básico podría ser:
// Read in the whole file
String[] strLines = File.ReadAllLines(strFilePath);
// Loop through each of the lines to process their contents
foreach (String strLine in strLines) {
// Tokenize on the spaces
String[] strTokens = strLine.Split(' ');
// Parse the values
int iIntValue = Int.Parse(strTokens[0]);
double dDoubleValue = Double.Parse(strTokens[1]);
// Do something with the values
}
La creación de su propia clase Parser
le permitiría mantener las fichas de estado y avance automático a medida que los utiliza. Si ir por ese camino, el StreamReader
puede ser la mejor opción.
Otros consejos
La mayoría de los tipos de datos básicos tendrán un .Parse
y .TryParse()
métodos que lo hará por usted.
Por ejemplo el método Int32.TryParse .
En .NET, muchos de los tipo tienen .Parse()
estática y métodos .TryParse()
que toma un parámetro de cadena.
Se podría hacer algo como:
Stream s = new Stream();
// Wire up the stream.
StreamReader reader = new StreamReader(s);
String value = reader.ReadToEnd();
int valueAsInt = Int32.TryParse(value);