Question

J'ai une fonctionnalité d'exportation qui lit les données de la base de données (enregistrements complets) et les écrit dans un fichier .txt, un enregistrement sur une ligne, chaque champ étant séparé par un ';'. le problème auquel je suis confronté est que certains champs contiennent des CRLF et lorsque je les écrit dans le fichier, il passe à la ligne suivante, détruisant ainsi la structure du fichier.

La seule solution est de remplacer les CRLF par une valeur personnalisée et, lors de l’importation, de les remplacer par CRLF. mais je n'aime pas cette solution car ces fichiers sont énormes et que l'opération de remplacement diminue les performances ....

Avez-vous d'autres idées?

merci!

Était-ce utile?

La solution

Oui, utilisez un générateur CSV qui cite des valeurs de chaîne. Par exemple, le module csv de Python.

Par exemple (extrait et modifié à partir du csv docs ):

import csv
def write(filename):
    spamWriter = csv.writer(open(filename, 'w'), quoting=csv.QUOTE_ALL)
    spamWriter.writerow(['Spam'] * 5 + ['Baked Beans'])
    spamWriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam\nbar'])

def read(filename):
    reader = csv.reader(open(filename, "rb"))
    for row in reader:
        print row

write('eggs.csv')
read('eggs.csv')

Sorties:

['Spam', 'Spam', 'Spam', 'Spam', 'Spam', 'Baked Beans']
['Spam', 'Lovely Spam', 'Wonderful Spam\r\nbar']

Autres conseils

Si vous avez le contrôle sur le mode d’exportation et d’importation du fichier, vous pouvez envisager d’utiliser XML. Vous pouvez également utiliser des guillemets doubles pour indiquer des littéraux tels que ", " dans les valeurs.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top