Comment puis-je lire et écrire CSV dans une manière semblable au NET FileHelpers?
Ce que quelqu'un sait comment je peux importer/exporter au format csv, txt fichiers dans une manière semblable au NET FileHelpers, mais à l'aide de Delphi, de prendre les espaces et les citations en compte et la manipulation traditionnelle CSV échapper à des règles d'une manière similaire à la façon dont CSV échapper travaille dans Excel?
réf. lien http://www.filehelpers.com/
Si votre réponse tend à être: "pourquoi ce paresseux gars n'écrivez pas un simple CSV parser", considérer les 5 minutes à la lecture et vous saurez alors pourquoi CSV analyse n'est pas trivial:
http://secretgeek.net/csv_trouble.asp
- En fait, la tâche est divisée en deux: le premier à écrire un générateur de jetons qui comptera pour les citations et les espaces (jeter regexes, la plupart du temps, vous pouvez vivre mieux sans eux), puis utilisez le générateur de jetons pour analyser le CSV ligne par ligne. L'écriture correcte et complète tokenizer m'a pris une heure ou deux.
- et de l'exportation est encore plus facile. J'ai écrit mes propres exportateur récemment, avec un objectif de haute performance.
- pourquoi vous avez accédé à la page rodomontades sur ces choses évidentes? en fait à la recherche dans le problème prend moins de temps que de chercher aléatoire des conseils dans teh internets.
- l'exportation est certainement plus facile que de l'analyse. Pour quelqu'un qui pense CSV analyse est triviale; Envoyez-moi votre fichier CSV de l'analyseur, et je vais vous montrer dix dans le monde réel CSV fichiers d'entrée qui va briser votre analyseur.
- im probablement manque quelque chose ici, mais pourquoi ce besoin de compter les espaces?
- erreur dans le libellé. Disons-le, "prendre les espaces et les citations en compte".
- J'ai changé le texte de cette question, de sorte qu'il s'adapte à la nouvelle règle que vous ne pouvez pas poser des questions sur ce bibliothèque à utiliser, seulement la manière de faire une tâche.
- Wow, à voir, à la clôture de la police sont ici en quelques secondes.
- nous aimons garder un Débordement de Pile propre et libre de spam. Recommandation les questions attirer le spam.
- Comme je l'ai dit je suis de fixation, vous pouvez licencier Jan?
- Vous voudrez peut-être voir celui-ci: codeproject.com/Tips/783493/... . C'est juste un simple PAS de fichier. Facile à utiliser.
Vous devez vous connecter pour publier un commentaire.
J'ai écrit un Dataset (TTable objet similaire) pour Jedi projet appelé TJvCsvDataSet qui suit toutes les CSV règles d'analyse d'une manière similaire à l'CSV règles d'analyse utilisée par Excel et de diverses bases de données et outils de rapport que l'importation et l'exportation des CSVs.
Vous pouvez installer JVCL, déposer une TJvCsvDataSet sur votre formulaire.
Il contient également une classe de flux qui sera très rapidement charger un fichier sur le disque, et l'analyse ligne par ligne, en utilisant la bonne échapper à des règles requises pour les fichiers CSV, même les fichiers qui incluent retour chariot/saut de ligne codes codées à l'intérieur d'un champ.
Vous suffit de les déposer sur votre formulaire et définissez la FieldDefs propriété comme cela:
CsvFieldDef=ABC:%,DEF:#,GHI:$,....
Il y a des codes spéciaux pour les entiers, les flottants, iso date-heure, et d'autres domaines. Il permet même à la carte un large champ de type chaîne à une utf8 champ dans un fichier CSV.
Il y a un moment de la conception de la propriété de l'éditeur pour vous éviter d'avoir à déclarer le CSV Champ Defs en utilisant la syntaxe ci-dessus, à la place, vous pouvez juste choisir visuellement ce que les types de colonne sont.
Si vous n'avez pas configuré un fichier CSV Champ de Def, il ne fait que des cartes de tout ce qui existe dans le fichier de type " chaîne de champs.
Jedi JVCL:
http://jvcl.delphi-jedi.org/
JvCsvDataSet Docs:
http://help.delphi-jedi.org/unit.php?Id=3107
http://help.delphi-jedi.org/item.php?Id=174896
JvCsv_MAXCOLUMNS
dansjvcl/run/JvCsvData.pas
. Et puis, avant l'ouverture de la table au moment de l'exécution, j'ai lu mon champ defs et ajusterJvCsvDataSet.TextBufferSize
à certains odieux largeur de compte pour mes longueurs de ligne. Maintenant, le contrôle fonctionne très bien, merci pour cette composante @WarrenPC'est assez basique, mais
TStringList
aDelimiter
,DelimitedText
, etQuoteChar
propriétés, qui répondent à certaines de ces questions.Mis à jour pour ajouter, par commentaires: Ne pas être tenté par le
CommaText
de la propriété, qui a un peu surprenant limites pour la compatibilité ascendante avec archaïque versions de Delphi.CommaText
, mais pas pourDelimitedText
. C'est pourquoi je n'ai pas le suggérer, même pour CSV. @Leandro, certains, mais pas tous. Si c'est approprié dépend de vos besoins, mais il a l'avantage particulier d'être construit dans.CommaText
etDelimitedText
ont (étonnamment) des règles différentes et je devrais sans doute remarque que dans ma réponse.Mon cadre a code dans le CsiTextStreamsUnt.pas fichier (voir http://www.csinnovations.com/framework_delphi.htm)
Voici quelque code que j'ai écrit qui lit les fichiers CSV, il gère les retours chariot à l'intérieur de citations ainsi.
À la suite de la VCL TXMLTransform logique, j'ai écrit un TCsvTransform classe helper qui se traduit par une .le format csv structure à partir d'un TClientDataSet.
Pour plus de détails sur TCsvTransform, cf http://didier.cabale.free.fr/delphi.htm#uCsvTransform.
NB: j'ai mis le même type de champ symboles comme Warren TJvCsvDataSet
Mes fonctions
Est venu à travers ce Delphi Fichier CSV et de la Chaîne de Classes de Lecteur pour Delphi 2009 et plus aujourd'hui sur CodeProject, je n'ai pas essayé, mais à partir de l'exemple de code c'est plutôt cool. Écrit par Vladimir Nikitenko, la classe principale est TnvvCSVReader.