2009-12-07 15 views
3

J'utilise la fonction ASP Classic ReadLine() de l'objet Système de fichiers.
Tout a fonctionné très bien jusqu'à ce que quelqu'un fasse son fichier d'importation sur un Mac dans TextEdit.Terminaisons de ligne non standard ASP Readline

Les fins de ligne ne sont pas identiques et ReadLine() lit le fichier entier, et pas seulement 1 ligne à la fois.

Existe-t-il un moyen standard de gérer cela? Une sorte de directive de page, ou un réglage sur l'objet système de fichiers?

Je suppose que je pouvais lire dans le fichier entier, et divisé sur vbLF, puis pour chaque élément, remplacez vbCR par « », puis de traiter les lignes, un à la fois, mais cela semble un peu kludgy.

J'ai cherché partout une solution à ce problème, mais les solutions sont tout le long de «ne pas enregistrer le fichier avec des fins de ligne de Mac [sic]».

Quelqu'un at-il une meilleure façon de gérer ce problème?

Répondre

4

Il n'y a aucun moyen de modifier le comportement de ReadLine, il ne reconnaîtra CRLF comme un terminateur de ligne. Par conséquent, la seule solution simple est celle que vous avez déjà décrite.

Modifier

En fait, il y a une autre bibliothèque qui devrait être disponible hors de la boîte sur un serveur ASP qui pourrait offrir de l'aide. C'est la bibliothèque ADODB.

L'objet ADODB.Stream possède une propriété LineSeparator pouvant être affectée à 10 ou 13 pour remplacer le CRLF par défaut qu'il utiliserait normalement. La documentation est incomplète car elle ne décrit pas comment cela peut être utilisé avec ReadText. Vous pouvez obtenir la méthode ReadText pour renvoyer la ligne suivante du flux en passant -2 comme paramètre.

Jetez un oeil à cet exemple: -

Dim sLine 
Dim oStreamIn : Set oStreamIn = CreateObject("ADODB.Stream") 

oStreamIn.Type = 2 '' # Text 
oStreamIn.Open 
oStreamIn.CharSet = "Windows-1252" 
oStreamIn.LoadFromFile "C:\temp\test.txt" 
oStreamIn.LineSeparator = 10 '' # Linefeed 

Do Until oStreamIn.EOS 
    sLine = oStreamIn.ReadText(-2) 
    '' # Do stuff with sLine 
Loop 

oStreamIn.Close 

Notez que par défaut le jeu de caractères est unicode donc vous devrez attribuer le jeu de caractères correct utilisé par le fichier si son non Unicode. J'utilise le mot "Unicode" dans le sens où la documentation fait ce qui signifie réellement UTF-16. Un avantage ici est que ADODB Stream peut gérer UTF-8 contrairement à la bibliothèque Scripting. Par ailleurs, je croyais que les MAC utilisaient un CR pour les fins de ligne? Son format de fichier Unix qui utilise des LF n'est-ce pas?

+0

Vous êtes probablement mort à droite sur le CR sur Mac et LF sur Unix. Honnêtement, je déboguais cette chose via 2 sessions de bureau à distance et les presse-papiers ne copiaient pas. Je savais juste qu'il y avait des différences, et j'ai eu de la chance en me demandant très tôt dans la session de débogage quel type de machine avait créé le fichier. Anthony, je voulais juste vous dire encore merci pour le temps et pensé que vous mettez dans votre réponse. J'apprécie vraiment cela. –

+0

Mac OS X est un Unix. C'était Classic Mac OS qui utilisait CR (bien que certaines applications le fassent encore, je pense). –