La lecture d'une ligne à partir d'un streamreader sans consommer?
Est-il un moyen de lire à l'avance d'une ligne pour tester si la ligne suivante contient des données de l'étiquette?
Je fais face à un format qui a une balise de début mais pas de balise de fin.
Je voudrais lire une ligne à ajouter à une structure de test puis la ligne ci-dessous pour vous assurer qu'il pas une nouvelle "nœud" et si elle n'est pas de continuer à ajouter si c'est le ferment de cette structure et de faire une nouvelle
la seule solution je pense est d'avoir deux flux de lecteurs en même temps un peu suffling chemin le long de l'étape de verrouillage, mais qui semble wastefull (si il fonctionnera même)
j'ai besoin de quelque chose comme coup d'oeil, mais peekline
- Je pense que PeekLine approche n'est pas une bonne façon de traiter avec "pas de balise de fin" le problème, parce que vous devez toujours peek ligne et test wherher nouvelle structure commence. J'aimerais définir la position du flux de la ligne précédente et la suivante ReadLine sera de retour à la ligne que vous venez de lire.
Vous devez vous connecter pour publier un commentaire.
Le problème est le flux sous-jacent peut même ne pas être adressable. Si vous regardez le lecteur de flux mise en œuvre, il utilise une mémoire tampon de sorte qu'il peut mettre en œuvre TextReader.Peek (), même si le flux n'est pas adressable.
Vous pourriez écrire un adaptateur simple qui lit la prochaine ligne et tampons à l'intérieur, quelque chose comme ceci:
BufferedLines
avant l'utilisation 🙂 et aussi, j'aimerais utiliser un autre nom pour PeekLine(), comme le nom suggère qu'il serait de retour la même ligne (la ligne suivante à partir de la position de la dernière ReadLine). A voté +1 déjàVous pouvez stocker la position de l'accès StreamReader.BaseStream.Position, puis de lire la ligne suivante ligne, faire votre test, puis chercher à la poste avant de lire la ligne:
C'est beaucoup de recherche, et la re-lecture de la même manière. À l'aide d'un peu de logique, vous avez peut-être pu éviter tout cela - par exemple, quand vous voyez une nouvelle balise de début, la clôture de la structure existante et de commencer un nouveau - voici un algorithme de base:
Pourquoi la difficulté? De retour à la ligne suivante, peu importe. Vérifier si c'est un nouveau nœud, si pas, l'ajouter à la structure. Si elle l'est, de créer une nouvelle structure.
Voici ce que j'ai d'aller si loin. Je suis plus du partage de la route que le streamreader ligne par ligne.
Je suis sûr qu'il ya quelques endroits qui sont en train de mourir à être plus élégant, mais pour l'instant il semble être au travail.
S'il vous plaît laissez-moi savoir ce que vous pensez