S'il vous plaît ne hésitez pas à me corriger si je me trompe à tout moment ...Quelle est la manière la plus efficace d'implémenter ReadLine() sur un flux binaire?
Je suis en train de lire un fichier en utilisant le fichier .NET CSV (valeurs séparées par des virgules) classes E/S. Maintenant le problème est, ce fichier CSV peut contenir des champs avec des retours chariot doux (c.-à-d. Des marqueurs \ r ou \ n plutôt que le standard utilisé dans les fichiers texte pour terminer une ligne) dans certains champs et le mode texte standard La classe d'E/S StreamReader ne respecte pas la convention standard et traite les retours chariot comme des retours chariot, compromettant ainsi l'intégrité du fichier CSV.
Maintenant, l'utilisation de la classe BinaryReader semble être la seule option restante, mais BinaryReader n'a pas de fonction ReadLine(), d'où la nécessité d'implémenter une ReadLine() par moi-même. Mon approche actuelle lit un caractère du flux à la fois et remplit un StringBuilder jusqu'à ce qu'un \ r \ n soit obtenu (en ignorant tous les autres caractères, y compris solitaire \ r ou \ n), puis retourne une représentation sous forme de chaîne de StringBuilder (en utilisant ToString()).
Mais je me demande: est-ce le moyen le plus efficace d'implémenter la fonction ReadLine()? S'il te plaît, éclaire-moi.
Lorsque vous dites «la convention standard», vous devez vous rendre compte que ce n'est pas particulièrement standard. Sous Unix, "\ n" est le terminateur de ligne normal, seul. –
Avez-vous vraiment un problème de perf ou est-ce un cas typique d'optimisation prématurée? ;). Je ne t'ai pas vu mentionner le problème de perf –
@Jon - Oui je sais, merci. Je voulais dire standard sur la fenêtre/dos. –