Bonjour,
Je voudrais lire des fichiers CSV mais je n'ai pas l'algo, et n'y a t'il pas un driver qui lit cela directement comme odbc ?
Merci d'avance.
Version imprimable
Bonjour,
Je voudrais lire des fichiers CSV mais je n'ai pas l'algo, et n'y a t'il pas un driver qui lit cela directement comme odbc ?
Merci d'avance.
sony351 a ecrit:
Tu peu utiliser un StringGrid pour y deposer tes donnees et les travailler.Citation:
Bonjour,
Je voudrais lire des fichiers CSV mais je n'ai pas l'algo, et n'y a t'il pas un driver qui lit cela directement comme odbc ?
Merci d'avance.
Entre autres solutions, il est possible avec le composant TAdvListView de www.tmssoftware.com d'utiliser une fonction comme ListView1->LoadFromCSV("Fichier.csv"). Dans ce cas, le fichier remplit une bo�te de liste (� configurer en vsreport pour visualiser tous les champs).
Tout d�pend de ce que tu veux faire de tes donn�es.
Sais tu au moins comment est organis� un fichier CSV ?
Une ligne dans le "tableau" = une ligne dans le fichier.
Chaque colonne dans une ligne est s�par�e par un ;
A partir de l� tu devrais sans probl�me arriver � �crire toi m�me le petit bout de code qui permet de "parser" un fichier CSV....bien entendu si tu veux afficher le fichier dans l'�quivalent d'un TStringGrid, les solutions qui t'ont �t� propos�e juste au dessus sont bien mieux !
Oui mais cet algo est complexe car il peut y avoir des doubles quote ou pas pour la data, ensuite si il y a des ; ou double quote dans la data, puis enfin il y a la gestion des erreurs.
Est ce que quelque chose comme ceci te depannerai.
L'ouverture du fichier se fait par une boite de dialogue, il y a un teste qui cherche le type de separateur et de fin de ligne, chaque champ est ecrit dans une cellule d'un StringGrid.Citation:
{
///////////////////////////////////
// on redefini le separateur decimal
////
DecimalSeparator = '.';
///////////////////////////////////
// ici on appelle la boite de dialogue ouvrir un fichier
// avec les options et le filtre
OpenDialog1->Options.Clear();
OpenDialog1->Options << ofAllowMultiSelect << ofFileMustExist;
OpenDialog1->Filter = "Fichiers TXT (*.TXT) (*.txt)|*.txt|Fichiers DOC (*.DOC) (*.doc)|*.doc|Fichiers CSV (*.CSV) (*.csv)|*.csv";
OpenDialog1->FilterIndex = 3; // demarre le dialogue d'affichage des fichiers
///////////////////////////////////
if(OpenDialog1->Execute() == NULL)
{
// si aucune selection on quitte
ShowMessage("aucun fichier selectionn� arret du programme");
Application->Terminate();
}
else
{
String FilePath = OpenDialog1->FileName;
///////////////////////////////////
// ici on va charger la StringGrid avec le fichier
int i;
int j;
int k;
char b;
AnsiString convertisseur;
TStringList *MyStringList = new TStringList();
MyStringList->LoadFromFile(FilePath); //Si tu as cr�er ton extension lors de la sauvegarde, penses � r�utiliser la m�me ici.
StringGrid1->ColCount=1;//cela met la grille � une seule colonne de base
StringGrid1->RowCount=1;//cela met la grille � une seule ligne de base
for(i=0;i<MyStringList->Count;i++)
{
convertisseur=MyStringList->Strings[i];
// teste pour trouver les separateurs en fonction on modifie
// (convertisseur.Pos("\t"));
if (convertisseur.Pos("\t") > 0)
b = '\t';
else
if (convertisseur.Pos("\;") > 0)
b = '\;';
else
if (convertisseur.Pos("\,") > 0)
b = '\,';
// on va chercher le separateur soit ( "\t" ) soit ( "\;" ) soit ( "\," )
for(j=0;(convertisseur.Pos(b)>=1);j++)
{
// on va chercher le separateur soit ( "\t" ) soit ( "\;" ) soit ( "\," )
convertisseur[convertisseur.Pos(b)]='\n';
//voir s'il faut ajouter un test sur le cas o� j=0
if(j>StringGrid1->ColCount)
StringGrid1->ColCount = j; //Il est possible que cela soit un j-1 ou un j+1...
if(i>(StringGrid1->RowCount-1))
StringGrid1->RowCount = i+1;
StringGrid1->Rows[i]->Text = convertisseur; // x correspond � la ligne, 0 pour la premi�re, souvent gris�e
}//fin du for
}
delete MyStringList; //si cette ligne te poses un soucis essayes de la supprimer: en th�orie elle est n�cessaire.