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.

¿Fue útil?

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);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top