Unix – Oracle: comment supprimer CR en fin de fichier

Je génère un fichier csv (example.csv) en utilisant une procédure oracle (utl_file.put_line), mais lorsque j’ouvre le fichier avec notepad, je me rends compte qu’il y a un retour de chariot (CR) à la fin du fichier. Je veux juste supprimer ce CR.

Le fichier est généré sur un serveur UNIX (AIX) et je l’ouvre sur mon ordinateur (Windows) en utilisant le bloc-notes.

Merci de votre aide

Cela semble mal tourner. Newline sous Unix est un saut de ligne (LF) et sous Windows, un retour à la ligne (CRLF).

Si vous créez un fichier sous Unix et que vous l’ouvrez dans Windows, je m’attendrais à peu de problèmes, car Windows fonctionne normalement que vous vouliez dire newline par LF. Si vous le faites dans l’autre sens, en générant le fichier dans Windows et en ouvrant sous Linux, vous devriez probablement vous attendre à un caractère parasite à la fin de chaque ligne.

La documentation indique que utl_file.put_line “ajoute un terminateur de ligne spécifique au système d’exploitation”. Cela signifie que les problèmes que vous rencontrez ont peu de sens. Il devrait y avoir un LF à la fin de chaque ligne. En outre, même si Oracle ne le faisait pas correctement et ajoutait une nouvelle ligne Windows, il s’agirait de CRLF.

Il se peut que Notepad ajoute quelque chose à un CR à la fin, même si cela n’a pas vraiment de sens.

Un travail de contournement, si vous allez toujours regarder le fichier dans Windows, est d’utiliser utl_file.put , qui n’inclut pas la nouvelle ligne spécifique au système d’exploitation à la fin et de concaténer CRLF à la fin.

Quelque chose, utl_file.put( filename, theline || chr(13) || chr(10) );chr(n) renvoie le caractère avec les valeurs n dans votre jeu de caractères. 13 est l’Ascii pour le retour chariot et 10 pour la nouvelle ligne.

Le moyen le plus simple et le plus courant de résoudre ce problème consiste à utiliser cet outil unix2dos. Exécutez cette commande sur votre boîte unix, puis ouvrez le fichier new_example.csv sur votre fenêtre.

voici la commande pour vous:

 unix2dos -n example.csv new_example.csv 

Extension de la réponse de Ben:

Vous pouvez également utiliser utl_file.put_line( filename, theline || chr(13));

La sortie est la même [CR] [LF] à la fin de la ligne.