Tengo una cadena en C# y me gustaría obtener texto de una línea específica, digamos 65. Y si el archivo no tiene tantas líneas me gustaría obtener "". ¿Como hacer esto?¿Cómo obtener una línea específica de una cadena en C#?
Respuesta
rápida y fácil, suponiendo \ r \ no \ n es su secuencia de nueva línea
string GetLine(string text, int lineNo)
{
string[] lines = text.Replace("\r","").Split('\n');
return lines.Length >= lineNo ? lines[lineNo-1] : null;
}
Si ya tiene una instancia de cadena, puede usar String.Split
para dividir cada línea y comprobar si la línea 65 está disponible y, de ser así, usarla.
Si el contenido está en un archivo, use File.ReadAllLines
para obtener una matriz de cadenas y luego haga la misma comprobación mencionada anteriormente. Esto funcionará bien para archivos pequeños, si su archivo es grande, considere leer una línea a la vez.
using (var reader = new StreamReader(File.OpenRead("example.txt")))
{
reader.ReadLine();
}
Aparte de tomar ventaja de una estructura de archivos específicos y operaciones de archivo de nivel inferior, no creo que los theres ninguna manera más rápida que leer 64 líneas, descartarlos y luego leer la línea 65a y la guardan. En cada paso, puede verificar fácilmente si ha leído el archivo completo.
Se puede usar un System.IO.StringReader
por encima de su cadena. Entonces podría usar ReadLine()
hasta llegar a la línea que deseaba o quedarse sin cadena.
Como todas las líneas podrían tener una longitud diferente, no hay ningún atajo para saltar directamente a la línea 65.
Cuando Split()
una cadena que se duplica, lo que también duplicar el consumo de memoria.
theString. Split ("\ n" .ToCharArray()) [64]
propenso a error de indexación fuera de límites – Amsakanna
Devolverá la línea 65 y obtendrá '\ r' al comienzo de todas las líneas devueltas en entornos donde Environment.NewLine sea" \ r \ n "(Windows) . – EventHorizon
sí, fui rápido en esa respuesta. La idea general es muy útil. Excepto, es un poco lento cuando se trata de cadenas de miles de líneas. Cuando se trata de líneas nuevas, depende de la fuente de la cadena. Si está escrito solo con \ n, sin \ r, entonces no funcionaría. El formato de la cadena no depende del entorno, ¿verdad? Las expresiones regulares harían el trabajo en este caso, pero más lento. – AlexanderMP
Lo que puede hacer es dividir la cadena según el carácter de nueva línea.
string[] strLines = yourString.split(Environment.NewLine);
if(strLines.Length > lineNumber)
{
return strLines[lineNumber];
}
Esto no funciona, no podemos convertir cadena a char []. – savi
private static string ReadLine(string text, int lineNumber)
{
var reader = new StringReader(text);
string line;
int currentLineNumber = 0;
do
{
currentLineNumber += 1;
line = reader.ReadLine();
}
while (line != null && currentLineNumber < lineNumber);
return (currentLineNumber == lineNumber) ? line :
string.Empty;
}
- 1. Obtener una cadena después de una subcadena específica
- 2. JavaScript: cómo eliminar la línea que contiene una cadena específica
- 3. Deshabilitar una advertencia específica en una línea específica en Xcode
- 4. ¿Cómo obtener una cadena terminada nula de una cadena C#?
- 5. Reemplazar una parte específica de una cadena de consulta PHP
- 6. Cómo obtener una dirección de memoria específica usando C
- 7. Eliminar una palabra específica de una cadena
- 8. Declarando una cadena de una línea looooong en C#
- 9. C libcurl obtener salida en una cadena
- 10. Agregar una nueva línea en una cadena en C#
- 11. insertando texto en una línea específica
- 12. Cómo obtener una cadena de anchura
- 13. Hash de una cadena de longitud específica
- 14. ¿Cómo salteo a una línea de entrada específica en Perl?
- 15. Obtener la cadena de la configuración regional predeterminada mediante una cadena en la configuración regional específica
- 16. ¿Cómo obtener todas las palabras de una cadena en C#?
- 17. ¿Cómo deshabilitar la advertencia en xcode en una línea específica?
- 18. ¿Cómo obtener una sección específica dentro de una página MAN?
- 19. Leer una cadena línea por línea usando C++
- 20. Reemplazar saltos de línea en una cadena C#
- 21. Desplazamiento de una vista de texto a una línea específica
- 22. ¿Obtener URL de una pestaña específica?
- 23. Cómo determinar si una cadena contiene una subcadena específica
- 24. ¿Cómo se escribe() una línea específica de un archivo en C?
- 25. cómo contar las palabras en una cadena específica en PHP?
- 26. ¿Cómo obtener una versión específica de un archivo en Mercurial?
- 27. ¿Cómo obtener instancia de una clase específica en PHP?
- 28. Java: Obtener una fuente con una altura específica en píxeles
- 29. ¿Cómo puedo desplazarme a una línea específica en un cuadro de texto de WinForms usando C#?
- 30. Cambiar una char específica en una cadena MySQL
Qué acerca del uso Environment.NewLine en su lugar? –
String.Split() solo acepta caracteres, y si pasa Environment.NewLine.ToCharArray() todas las demás líneas estarán vacías (edit: en Windows, Unix funcionará bien) – EventHorizon
StringSplitOptions.RemoveEmptyEntries –