Saut de ligne de la question de l'CSV pour MySQL
Je suis de l'importation d'un .fichier csv dans MySQL et tout fonctionne bien, sauf les sauts de ligne dans le fichier.
Un de mes .csv lignes ressemble à ceci:
42,E-A-R™ Classic™ Earplugs,ear,images/ear/classic.jpg,5%,"Proven size, shape, and foam
3M's most popular earplug
Corded and uncorded in a variety of individual packs
NRR 29 dB /CSA Class AL",312-1201,,"E-A-R™ Classic™ Uncorded Earplugs, in Poly Bag",310-1001,,E-A-R™ Classic™ Uncorded Earplugs in Pillow Pack,311-1101,,"E-A-R™ Classic™ Corded Earplugs, in Poly Bag"
Le sixième champ devrait briser dans une nouvelle ligne lorsqu'il est appelé, mais il ne le fait pas. Lors de l'importation de l' .csv-je sélectionner Lines terminated by \r. J'ai essayé \n et auto mais pas de chance.
Chose étrange est, le champ semble correct dans la base de données avec toutes les pauses. Si je aller manuellement pour insérer des sauts de ligne dans PHPmyadmin il s'imprime correctement. Chaque champ est défini à l'UTF-8.
Toutes les idées sur ce point? Merci.
modifier: ici est la base de la déclaration
LOAD DATA LOCAL INFILE '/tmp/php89FC0F' REPLACE INTO TABLE `ohes_flyer_products`
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
ESCAPED BY '\\'
LINES TERMINATED BY '\r'
Je suppose que vous voulez dire la 6ème champ, qui commence par "Prouvé taille...
Vous pouvez aussi afficher l'exacte MySQL CHARGE de déclaration de DONNÉES que vous utilisez?
J'ai le problème inverse, où j'ai d'exportation de données MySql à utiliser dans Excel pour les rapports, et les champs qui contiennent des internes de sauts de ligne à cause d'un saut de ligne pour la ligne, soit dans une nouvelle ligne avec des données qui ont été contenues dans la rangée précédente. Ma solution est d'utiliser la barre verticale (|) pour les sauts de ligne, et de convertir tout dans un éditeur de texte avant de l'utiliser.
MySQL déclaration de la grande poste, et je suis importer avec phpMyAdmin.
OriginalL'auteur Carson | 2011-01-13
Vous devez vous connecter pour publier un commentaire.
peut-être que vous pourriez utiliser fgetcsv pour analyser chaque csv ligne dans un tableau et ensuite dump que la matrice de dans la base de données?
quelque chose le long des lignes de
note 1: le code n'est pas prêt pour la production, la vérification des injections SQL!
note 2: s'il vous plaît, utiliser les requêtes préparées dans leur utilisation permettra d'accélérer la chose d'un lot (ou faire de multi-rangée instruction insert).
note 3: enroulez le tout dans une transaction.
OriginalL'auteur Carlos Campderrós
JE VOUS REMERCIE, CHER... VOUS AVEZ SAUVÉ MON TRAVAIL
OriginalL'auteur Krunal
Votre fichier CSV a quelques qualités que vous pourriez être en mesure d'exploiter.
Sachant cela, voici quelques choses que vous pouvez essayer:
À l'aide d'un programme comme UltraEdit (ou Notepad++) et de ses rechercher/remplacer les fonctionnalités (qui comprennent l'expression régulière de la manipulation):
Étant donné que les retours chariot apparaître à l'intérieur d'un terrain qui est clos par un délimiteur (les guillemets), vous pouvez spécifier que l'importation du moteur ne doit honneur de terrain et les séparateurs d'enregistrements à l'extérieur de citations. (MySQL LOAD DATA INFILE syntaxe) Plus précisément, le regard à la
ENCLOSED BY 'char'
paramètre. Depuis pas tous vos champs d'utiliser le séparateur, vous aurez besoin de spécifierOPTIONALLY
. En théorie, vous devriez être en mesure de spécifier la façon dont le fichier CSV est construit et pas besoin d'analyser à l'avance. Je suis d'avis, toutefois, que le champ des retours chariot doit probablement être retiré afin que le texte s'enrouler correctement lors de la sortie dans le nouveau contexte.OriginalL'auteur JYelton
Votre CSV semble être non-standard, mais c'est souvent la réalité de traiter avec les ensembles de données client.
Comme des outils comme MySQL CHARGE de déclaration de DONNÉES sont faites pour gérer uniquement le parfait cas d'utilisation, j'ai trouvé que le problème de la non-standard des ensembles de données comme ceci nécessite le code.
Une façon de gérer cela est de première gommage de votre CSV, en remplacement du milieu de terrain des sauts de ligne avec un de particulier, d'unique chaîne de caractères (comme
===MIDFIELD_LINE_BREAK===
). Ensuite je voudrais écrire une coutume CSV analyseur dans un langage de script (Python, Ruby, PHP, Perl, etc).Dans un fichier CSV analyseur, itérer sur les lignes du fichier. Pour chaque ligne:
\n
ou\r
caractères de retour pour la===MIDFIELD_LINE_BREAK===
caractères.Je devrais ai précisé que quand j'ai dit 'nettoyant', je voulais dire pour qu'il soit automatique à base de règles scrubbing (c'est à dire
join the next line until there are X unescaped/uncontained commas
). Je ne connaissais pas votre jeu de données était assez petit pour se frotter à la main, mais je suis content que ça fonctionne pour vous!OriginalL'auteur Kyle Wild
Cela a fonctionné pour moi:
J'ai eu à retoucher @Krunal réponse, en raison des erreurs, par l'ajout d'un supplément de quelques barres obliques.
Unix retourne utilisé ici, par la manière.
OriginalL'auteur bloodyKnuckles