J'ai une chaîne en C # et j'aimerais obtenir du texte de la ligne spécifique, par exemple 65. Et si le fichier n'a pas autant de lignes, je voudrais obtenir "". Comment faire cela? P>
7 Réponses :
Si vous avez déjà une instance de chaîne, vous pouvez utiliser Si le contenu est dans un Utilisation de fichier string.split code> pour diviser chaque ligne et vérifier si la ligne 65 est disponible et si elle l'utilise si elle est utilisée.
fichier.readalllines code> pour obtenir une matrice de chaîne, puis faites le même chèque mentionné précédemment. Cela fonctionnera bien pour les petits fichiers, si votre fichier est grand envisagez de lire une ligne à la fois. P>
using (var reader = new StreamReader(File.OpenRead("example.txt")))
{
reader.ReadLine();
}
autre que de tirer parti d'une structure de fichiers spécifique et d'opérations de fichier de niveau inférieur, je ne pense pas qu'il n'y ait plus de manière plus rapide que de lire 64 lignes, de les jeter, puis de lire la 65ème ligne et de le conserver. À chaque étape, vous pouvez facilement vérifier si vous avez lu l'ensemble du fichier. P>
rapide et facile, en supposant \ r \ n ou \ n est votre séquence de nouvelle ligne
Qu'en est-il de l'utilisation de l'environnement.Newline à la place?
String.split () accepte uniquement caractère, et si vous passez environnement.Newline.tocharray () Toutes les autres lignes seront vides (modifier: dans Windows, UNIX fonctionnera bien)
Stringsplitoptions.removeemptyentries
@Henk: Vous avez raison - sauf lorsque vous avez des lignes vides dans le texte original? Je suis toujours coincé avec .NET 2.0 et je n'ai pas de telles options fantaisistes :-) Merci pour l'info.
Fyi, ce que je fais est que je fais un text.replace ("\ n \ r", "\ n"). Remplacez ("\ r \ n", "\ n"). Split ('\ n' ) code>
Vous pouvez utiliser un Comme toutes les lignes pouvaient avoir une longueur différente, il n'y a pas de raccourci pour sauter directement à la ligne 65. P>
Lorsque vous system.io.stringreader code> sur votre chaîne. Ensuite, vous pouvez utiliser
readline () code> jusqu'à ce que vous arriviez à la ligne que vous vouliez ou manquez de chaîne. P>
SPLIT () CODE> Une chaîne Vous le dupliquez, ce qui doublerait également la consommation de mémoire. P>
Thestring. Split ("\ n" .tocharray ( ))) [64] p>
Il retournera la ligne 65 et vous obtiendrez «\ R» au début de toutes les lignes retournées dans des environnements où l'environnement.Newline est «\ r \ n» (Windows).
Oui, j'étais rapide sur cette réponse. L'idée générale est-elle une oeuvre. Sauf que c'est un peu lent quand il s'agit de cordes de milliers de lignes. En ce qui concerne les nouvelles lignes, cela dépend de la source de la chaîne. S'il est écrit seulement avec \ n, sans \ r, alors cela ne fonctionnerait pas. Le format de la chaîne ne dépend pas de l'environnement, n'est-ce pas? Les expressions régulières feraient le travail dans ce cas, mais plus lentement.
Ce que vous pouvez faire est, diviser la chaîne en fonction du caractère de nouvelle ligne.
string[] strLines = yourString.split(Environment.NewLine); if(strLines.Length > lineNumber) { return strLines[lineNumber]; }
Cela ne fonctionne pas, nous ne pouvons pas convertir la chaîne en caractères [].
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; }