J'importe un fichier .csv dans MySQL et tout fonctionne bien, à l'exception des pauses de ligne qui se trouvent dans le fichier.
Une de mes lignes .CSV ressemble à ceci: P>
LOAD DATA LOCAL INFILE '/tmp/php89FC0F' REPLACE INTO TABLE `ohes_flyer_products` FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '\\' LINES TERMINATED BY '\r'
5 Réponses :
Votre CSV semble être non standard, mais c'est souvent la réalité de traiter les jeux de données clients. p>
Comme des outils tels que le relevé de données de charge de MySQL sont faits pour gérer uniquement le cas d'utilisation parfait, j'ai trouvé que traiter avec des jeux de données non standard tels que celui-ci nécessite un code. P>
Un moyen de gérer ceci est d'abord graver votre CSV, remplaçant les pauses de ligne de champ médiane avec une chaîne unique unique (comme Dans votre analyseur CSV, itérale à travers des lignes dans le fichier. Pour chaque ligne: p>
=== Midfield_line_break === code>). Ensuite, j'écrirais un analyseur CSV personnalisé dans une langue de script (Python, Ruby, PHP, Perl, etc.). p>
\ n code> ou
\ r code> BACK IN pour le
=== Midfield_line_break === code> caractères. li>
Cela ressemble à cela fonctionnerait, mais cela implique toujours de saisir manuellement le === Midfield_line_break ===. Au lieu de cela, je suis entré manuellement sur \ N et cela semble fonctionner. Merci quand même.
J'aurais dû préciser que lorsque j'ai dit "frotter", je voulais dire qu'il s'agit d'un nettoyage automatique basé sur des règles (I.E. Rejoignez la ligne suivante jusqu'à ce qu'il y ait x des virgules non évaluées / non contenues code>). Je ne savais pas que votre ensemble de données était assez petit pour frotter manuellement, mais je suis content que cela ait fonctionné pour vous!
LOAD DATA LOCAL INFILE '/tmp/php89FC0F' REPLACE INTO TABLE `ohes_flyer_products` FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '\\' LINES TERMINATED BY '\r\n'
Votre fichier CSV a certaines qualités que vous pourriez être en mesure d'exploiter. P>
Connaissant cela, voici quelques éléments que vous pouvez essayer: p>
Utilisation d'un programme tel que UltraDit (ou Notepad ++) et ses fonctions de recherche / remplacement (qui incluent Manipulation d'expression régulière): p>
Étant donné que les retours de chariot apparaissent dans un champ inclus par un délimiteur (les guillemets), vous pouvez spécifier que le moteur d'importation ne doit interdire que le champ et enregistrer les délimiteurs dehors em> de citations . ( Syntaxe d'infime de données de charge MySQL ) Spécifiquement, regardez Le paramètre ci-joint par 'Char' code>. Étant donné que tous vos champs n'utilisent pas le délimiteur, vous devrez spécifier
éventuellement code>. En théorie, vous devriez être capable de spécifier comment le fichier CSV est construit et n'a pas besoin de l'analyser à l'avance. Je suis de l'avis, cependant, que les rendements de la chaise en champ devraient probablement être supprimés de manière à ce que le texte s'enroule correctement lors de la sortie dans un nouveau contexte. P> LI>
ol>
Peut-être que vous pourriez utiliser Fgecsv pour analyser chaque ligne CSV dans un tableau, puis vider ce tableau dans la base de données?
quelque chose sur les lignes de p> note 1: Code n'est pas prêt pour la production, vérifiez les injections SQL! p> Note 2: Veuillez utiliser Les déclarations comme utilisez-les accéléreront beaucoup de choses (ou créent une instruction d'insertion à plusieurs lignes). p> Note 3: enveloppez tout dans une transaction. P> P>
Ceci a fonctionné pour moi:
DOS: \\\r\\\n Old Mac: \\\r Unix: \\\n
Qu'essayez-vous d'importer avec initialement, phpmyadmin ou console MySQL?
Je suppose que vous voulez dire le 6ème champ, cela commence par "Taille éprouvée ...
Pouvez-vous également publier l'instruction de données de charge MySQL exacte que vous utilisez?
J'ai le problème opposé, où j'exprime des données de MySQL à utiliser dans Excel pour des rapports et des champs contenant des pauses de ligne internes entraînant une pause de ligne pour la ligne, ce qui a entraîné une nouvelle ligne avec des données qui auraient dû être contenues dans la ligne précédente. . Ma solution consiste à utiliser le caractère de pipe (|) pour les pauses de ligne et tout convertir dans un éditeur de texte avant utilisation.
La déclaration MySQL est dans le message principal maintenant, et j'importe avec phpmyadmin.
Si j'ajoute \ n à la fin de chaque ligne dans le fichier .csv, cela fonctionne, mais cela devient assez fastidieux quand il y a quelques centaines de lignes ..
Le fichier CSV est-il venu directement d'Excel ou provenait d'une autre source? Le point que j'essaie d'obtenir est, savez-vous spécifiquement que le fichier CSV est délimité par un \ r ou a \ n et non a \ r \ n? Aussi quelle version de phpmyadmin êtes-vous?
J'ai initialement fait le fichier dans Excel, mais après avoir codé des problèmes, je l'ai ouvert dans Textmate et l'a enregistré comme UTF-8. Version PHP: 3.2.2 Version client MySQL: 5.0.45
Pouvez-vous essayer d'importer avec un délimiteur de ligne \ r \ n?
J'ai essayé cela et cela ne renvoie qu'une rangée plutôt que toutes. Je pense que j'ai lu quelque part que sur un mac, vous écrivez seulement \ r
Windows = \ R \ N (Excel créé par M $) Mac = \ r Linux \ Unix = \ n.
Il doit y avoir une meilleure façon, mais pour l'instant, je viens de mettre un \ n à la fin de chaque ligne dans le fichier .csv (sur Excel), puis l'a ouvert en textmate pour le convertir en UTF-8. Tout le processus ..
@Carson: Juste pour clarifier, votre problème est-il avec la sortie PHP de la ligne MySQL à HTML? Les navigateurs ignorent les caractères de la nouvelle ligne sauf lorsque le texte est dans les zones de texte. Lorsque vous envoyez une page sur une page, avez-vous essayé de l'enveloppement de texte dans la fonction
NL2BR (PHP> NL2BR () CODE>?