2010-10-24 7 views
0

Mon code copie les fichiers à partir de ftp (en utilisant le mode de transfert de texte) vers le disque local, puis essaie de les traiter. Tous les fichiers contiennent uniquement du texte et les valeurs sont séparées par une nouvelle ligne. Parfois, les fichiers sont déplacés vers ce ftp en utilisant le mode de transfert binaire et il semble que cela gâchera les lignes. En utilisant l'éditeur hexadécimal, j'extrémités de la ligne comparais selon le mode de transfert utilisé pour envoyer des fichiers à ftp: en utilisant le mode texte: les terminaisons de fichiers sont 0D 0A en utilisant le mode binaire: fichier terminaisons sont 0D 0D 0AComment lire les fichiers texte transférés en tant que fichiers binaires

Est-il possible de modifier mon code pour qu'il puisse lire les fichiers dans les deux cas? code de travail qui illustre mon problème et montre comment je suis la lecture du fichier: (ici j'utiliser le même fichier, qui contient 14 lignes de données)

int   i; 
container con; 
container files = ["c:\\temp\\axa_keio\\ascii.txt", "c:\\temp\\axa_keio\\binary.txt"]; 

boolean  purchLineFirstRow; 
IO   inFile; 
; 
for(i=1; i<=conlen(files); i++) 
{ 
    inFile = new AsciiIO(conpeek(files,i), "R"); 
    inFile.inFieldDelimiter('\n'); 

    con = inFile.read(); 
    info(int2str(conlen(con))); 
} 

fichiers proviennent du système Unix vers Windows sytem. Pas sûr mais peut-être la question pourrait être: "Quelles valeurs inFieldDelimiter devrais-je utiliser pour lire les deux extrémités de ligne Unix et Windows?"

+0

Pouvez-vous spécifier si vous allez et de Windows, Linux, BSD ou quels systèmes d'exploitation de chaque côté? La terminaison de ligne est spécifique au système d'exploitation et en mode texte, FTP effectue une traduction qui n'est pas effectuée en mode binaire. –

+0

Les fichiers proviennent du système Unix vers Windows. – Keios

Répondre

0

Utilisation inRecordDelimiter:

inFile.inRecordDelimiter('\n'); 

au lieu de:

inFile.inFieldDelimiter('\n'); 

Il ce peut encore être un CR ballants sur le dernier champ, vous pouvez supprimer:

strRem(conpeek(con, conlen(con)), '\r') 

Voir aussi: http://en.wikipedia.org/wiki/Line_endings

Questions connexes