2010-11-30 15 views
6

Mi pregunta es bastante simple. Necesito obtener todas las líneas de texto del archivo de texto de Windows. Todas las líneas están separadas por símbolos \ r \ n. Yo uso String.Split, pero no es genial, porque solo se divide 'por un símbolo' dejando una cadena vacía que necesito eliminar con el indicador de opciones. ¿Hay una mejor manera?Cómo dividir las líneas del archivo de texto de Windows (separación de/r/n)

Mi aplicación

string wholefile = GetFromSomeWhere(); 

// now parsing 
string[] lines = operationtext.Split("\r\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); 

// ok now I have lines array 

ACTUALIZACIÓN

File.ReadAllXXX no sirve de nada aquí coz GetFromSomeWhere es en realidad expresiones regulares, por lo que he ningún archivo después de este punto.

+0

definitivamente echa un vistazo a esta [propuesta] (http://area51.stackexchange.com/proposals/11464/code-review?referrer=aWNm_PdciyFqjFW8CUacGw2 " revisión de código"). Casi está allí, solo necesita un poco más de soporte :) – greatwolf

Respuesta

15

Usted puede utilizar this overload de String.Split, que tiene una matriz de cadenas que puede servir como delimitadores:

string[] lines = operationtext.Split(new[] { Environment.NewLine }, 
            StringSplitOptions.RemoveEmptyEntries); 

De Por supuesto, si ya tiene la ruta de archivo, es mucho más simple de usar File.ReadAllLines:

string[] lines = File.ReadAllLines(filePath); 
+1

No se puede usar, pero ¿qué sucede si veo en Reflector lo que hace –

+1

@Captain Comic: Para responder a su pregunta, en .NET 3.5, puedo ver que 'File.ReadAllLines' usa un 'StreamReader' para leer el archivo línea por línea, cargando cada línea en una' ArrayList'. Luego convierte esto en una matriz de cadenas con el método 'ArrayList.ToArray'. – Ani

+0

@Captain Comic: dices "no puedo usar" sin explicar por qué. No entiendo por qué uno o ambos de estos dos métodos no harán exactamente lo que estás pidiendo. –

4

String.Split acepta una cadena (como "\ r \ n"). No solo una chararray

string[] lines = wholetext.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); 
3

se puede utilizar un método de extensión como la de abajo, y su código podría tener el siguiente aspecto:

var lines = operationText.ReadAsLines(); 

Extensión implementación del método:

public static IEnumerable<string> ReadAsLines(this string text) 
    { 
     TextReader reader = new StringReader(text); 
     while(reader.Peek() >= 0) 
     { 
      yield return reader.ReadLine(); 
     } 
    } 

supongo que no es tan performante como la opción de división, que suele ser muy eficiente, pero si eso no es un problema ...

Cuestiones relacionadas