Quelle est la meilleure façon de déterminer les terminaisons de ligne utilisées dans un fichier texte (Unix, Windows, Mac)? P>
7 Réponses :
Il y a Si c'est la lecture, je cherche généralement Environnement.NewLine code> Bien que cela ne soit que pour déterminer ce qui est utilisé sur le système actuel et ne vous aidera pas à lire des fichiers de différentes sources. P>
\ n code> (modifier: il n'y en a à l'aide de
\ r code>) et suppose que la ligne se termine là. P>
Hmm, je changerais vos paragraphes - le deuxième paragraphe est une réponse - pas sûr que environnement.Newline code> est terriblement pertinent.
Il n'y a aucune mention si cela est destiné à lire de diverses sources ou à écrire à plusieurs cibles dans la question, autant que je puisse voir et que la balise était simplement C # à l'époque. J'ai considéré environnement.Newline code> utile si la question relative à l'écriture "correctement" sur d'autres platformations (mono etc.) par exemple. De toute façon, je n'ai pas passé beaucoup de temps à envisager de commander les paragraphes.
J'imagine que vous ne pouviez pas savoir avec certitude, devriez-vous définir cela dans l'éditeur. Vous pouvez utiliser un certain AI, l'algorithme serait: p>
Ainsi, par exemple, si vous aviez des répétitions de CRLF à 38, 40, 45, et que c'était dans la tolérance, vous devez par défaut de supposer que la fin de la ligne était la CRLF. p>
Si c'était moi, je voudrais juste lire le fichier un caractère à la fois jusqu'à ce que je rencontrais le premier \ r code> ou a
\ n code>. Cela suppose que vous avez une entrée sensoriale. P>
Je ne ferais que rechercher le fichier pour le premier \ r code> ou
\ n code> et s'il s'agissait d'un
\ n code> je regarderais au personnage précédent pour voir s'il s'agit d'un
\ r code>, si oui, c'est
\ r \ n code> sinon c'est celui qui a été trouvé. P>
Si vous "recherchez le fichier pour le premier \ r code> ou
\ n code>", vous savez que le personnage précédent n'est ni de ces deux. Je pense que vous voulez dire regarder le caractère suivant (pour voir si la paire est
\ r \ n code>).
lire la plupart des formats textuels que je cherche habituellement \ n, puis couper () la chaîne entière (les espaces à début et la fin sont souvent redondants). P>
Voici quelques devinières avancées: lisez le fichier, comptez CRS et LFS
if (CR > LF*2) then "Mac" else if (LF > CR*2) then "Unix" else "Windows"
Notez que les fichiers texte peuvent avoir des terminaisons de ligne incohérentes. Votre programme ne devrait pas s'étouffer à ce sujet. Utilisation de Si vous lisez manuellement des lignes d'un fichier, assurez-vous d'accepter les terminaisons de ligne em>, même si incompatibles. En pratique, cela est assez facile en utilisant l'algorithme suivant: P>
readline code> sur un
StreamReader code> (et des méthodes similaires) prendra soin de toute ligne possible terminant automatiquement. P>
Sachez que pour les fichiers Unicode, il existe un certain nombre de caractères différents qui envisagent des terminaisons de ligne juridique. Ils comprennent: caractère de retour de chariot (U + 000d), caractère d'alimentation de ligne (U + 000A), caractère de retour de chariot (U + 000D) suivi du caractère d'alimentation de ligne (U + 000a), caractère séparateur de ligne (U + 2028), et Le caractère de séparateur de paragraphe (U + 2029). Il existe également parfois un caractère «fin du texte» (U + 0003) qui peut être utilisé légalement comme terminateur de la dernière ligne d'un fichier.
Beaucoup de fichiers ont même un mélange de plusieurs types (HL7, je vous regarde).