begin process at 2012 05 29 04:28:27
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

MFC

 > 

fichier txt vers ListCtrl


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

fichier txt vers ListCtrl

mardi 5 mai 2009 à 14:31:58 | fichier txt vers ListCtrl

gregdu80

Bonjour à tous et à toutes,
dans le cadre de mon stage, je doit lire un fichier au format csv et récupérer les données afin de les afficher dans une ListCtrl sous visual C++ 6.
Le problème se trouve dans le fait que le fichier contient 9 colonnes et une centaine de ligne, et que le code que j'ai tapé me permet de lire uniquement les deux premières colonnes (sur toutes les lignes) du fichier csv.

Voici le code correspondant :

bool b_result = true;
char format[7];
CString str,str_tmp;
char delim = ';';

double freq,imped1,adapt1,imped2,adapt2;

m_list_carac_boite_antenne.DeleteAllItems();

CWinApp * theApp = AfxGetApp();
if(theApp)
{
    str_tmp = theApp->GetProfileString("SEPARATEURS_CSV","CHAMP",";");
  delim = str_tmp.GetAt(0);
}

sprintf(format,"%s%c%s","%lf",delim,"%lf");
CStdioFile fileBA;
if(!fileBA.Open((LPCTSTR)strFileBA,CFile::modeRead))
{
  AfxMessageBox("impossible d'ouvrir le fichier "+strFileBA);
  return false;
}
else
{
  while(fileBA.ReadString(str))
  {
   if(sscanf((LPCTSTR)str,format,&freq,&imped1,&adapt1,&imped2,&adapt2) == 2)
   {
    str_tmp.Format("%1.lf",freq);
    m_list_carac_boite_antenne.InsertItem(m_list_carac_boite_antenne.GetItemCount(),str_tmp);
    str_tmp.Format("%1.4lf",imped1);
    m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,1,str_tmp);
    str_tmp.Format("%1.3lf",adapt1);
    m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 2,2,str_tmp);
    str_tmp.Format("%1.4lf",imped2);
    m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 3,3,str_tmp);
    str_tmp.Format("%1.3lf",adapt2);
    m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 4,4,str_tmp);
   }
  }
  fileBA.Close();
}
  return b_result;
}

Voilà si quelqu'un peut voler à mon secours, cela serait vraiment super!!
Merci
jeudi 14 mai 2009 à 19:05:12 | Re : fichier txt vers ListCtrl

rt15

Membre Club Administrateur CodeS-SourceS
Salut,

Trois fois la même question... Je supprime les deux autres.

Détail plus ton problème. Ton sscanf lit tout ce qu'il faut dans le fichier, non ?
vendredi 15 mai 2009 à 09:39:59 | Re : fichier txt vers ListCtrl

gregdu80

Oui je sais mais comme je n'avais pas de réponse je postait ma question différemment. Désolé.
Et bien en fait je pense que mon sscanf et fait pour ne lire que les deux premières colennes de mon fichier, or, il faudrait que je puisse lire chaque ligne et chaque colonne.
Pour précision mon fichier contient 9 colonnes, chaque valeur est séparé par un ";".
J'espére avoir été plus clair...
vendredi 15 mai 2009 à 11:44:08 | Re : fichier txt vers ListCtrl

rt15

Membre Club Administrateur CodeS-SourceS
Bin modifie ton sscanf !

Pourquoi un test == 2 d'ailleurs, si tu veux 9 valeurs ?
if(sscanf((LPCTSTR)str,format,&freq,&imped1,&adapt1,&imped2,&adapt2) == 2)
vendredi 15 mai 2009 à 13:17:10 | Re : fichier txt vers ListCtrl

gregdu80

Oui j'ai déjà essayé de modifier mon sscanf, mais lorsque je mets une autre valeur que 2 ca ne fonctionne pas. Le seul moyen d'avoir quelque chose est de mettre ==2 ou rien du tout...
Cela reste un mystère pour moi!!
vendredi 15 mai 2009 à 14:38:28 | Re : fichier txt vers ListCtrl

rt15

Membre Club Administrateur CodeS-SourceS
Ah vi, c'est à cause du format :
sprintf(format,"%s%c%s","%lf",delim,"%lf");

Ca te fait %lf;%lf, et c'est ça que tu passes au sscanf.
Il faut que tu mette plus de choses dans ta chaîne de formatage.

Autre choses, tu parles de 9 colonnes, mais ton sscanf est près à récupérer 5 valeurs.
vendredi 15 mai 2009 à 14:59:41 | Re : fichier txt vers ListCtrl

gregdu80

Le bout de code plus haut était juste un test pour voir si je pouvais le faire sur moins de valeurs...
J'ai essayé ce que tu m'as dit, mais j'ai pas l'impression que le problème vienne de là puisque ca ne fonctionne toujours pas...

bool CChargementBoiteAntenneEtAntenneDlg::loadBA(CString strFileBA)
{
bool b_result = true;
char format[9];
CString str,str_tmp;
char delim = ';';

double freq,imped1,adapt1;
double imped2,adapt2;
double imped3,adapt3;
double imped4,adapt4;

m_list_carac_boite_antenne.DeleteAllItems();

CWinApp * theApp = AfxGetApp();
if(theApp)
{
   str_tmp = theApp->GetProfileString("CSV_DELIMITERS","DELIM",";");
delim = str_tmp.GetAt(0);
}

sprintf(format,"%s%c%s","%lf",delim,"%lf",delim,"%lf",delim,"%lf",delim,"%lf",delim,"%lf",delim,"%lf",delim,"%lf",delim,"%lf");
CStdioFile file;
if(!file.Open((LPCTSTR)strFileBA,CFile::modeRead))
{
AfxMessageBox("impossible d'ouvrir le fichier "+strFileBA);
return false;
}
else
{
while(file.ReadString(str))
{  
if (sscanf((LPCTSTR)str,format,&freq,&imped1,&adapt1,&imped2,&adapt2,&imped3,&adapt3,&imped4,&adapt4))
{
str_tmp.Format("%1.lf",freq);
m_list_carac_boite_antenne.InsertItem(m_list_carac_boite_antenne.GetItemCount(),str_tmp);
str_tmp.Format("%1.4lf",imped1);
m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,1,str_tmp);
str_tmp.Format("%1.3lf",adapt1);
m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,2,str_tmp);
str_tmp.Format("%1.4lf",imped2);
m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,3,str_tmp);
str_tmp.Format("%1.3lf",adapt2);
m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,4,str_tmp);
str_tmp.Format("%1.4lf",imped3);
m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,5,str_tmp);
str_tmp.Format("%1.3lf",adapt3);
m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,6,str_tmp);
str_tmp.Format("%1.4lf",imped4);
m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,7,str_tmp);
str_tmp.Format("%1.3lf",adapt4);
m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,8,str_tmp);
}
}
file.Close();
}
return b_result;
}

Est-ce que le problème ne viendrait pas de la partie %s%c%s ?
vendredi 15 mai 2009 à 15:15:33 | Re : fichier txt vers ListCtrl

rt15

Membre Club Administrateur CodeS-SourceS
Réponse acceptée !
Vi tout à fait cela vient de là. Faut que tu te tapes %s%c%s%c...

Pour info, tu as l'aide de toutes les fonctions vraiment standards y compris sprintf, sur ce site.
vendredi 15 mai 2009 à 15:48:03 | Re : fichier txt vers ListCtrl

gregdu80

Bon et bien j'ai tappé ceci dans mon sprintf :
sprintf(format,"%s%c%s%c%s%c%s%c%s%c%s%c%s%c%s%c%s","%lf",delim,"%lf",delim,"%lf",delim,"%lf",delim,"%lf",delim,"%lf",delim,"%lf",delim,"%lf",delim,"%lf");
mais ca ne fonctionne toujours pas...
Je ne comprends pas pourquoi...
vendredi 15 mai 2009 à 16:21:04 | Re : fichier txt vers ListCtrl

gregdu80

Bon en fait c'est bon a priori le problème venait de format[9] il suffisait juste de l'augmenter pour que ca fonctionne.
Je te remercie tu as trouvé la solution à mon problème que je trainais depuis un bon moment


Cette discussion est classée dans : boite, str, list, tmp, carac


Répondre à ce message

Sujets en rapport avec ce message

problème CListBox [ par snakeissat ] salut, j'ai un problème avec CListBox, en faite je veut y afficher le contenu d'un fichier. l'affichage s'effectue sauf qu'à la fin de chaque ligne u Problème avec une listview gtk+ [ par MorbhAck ] Bonsoir tout le monde !J'ai ptit souci avec gtkJ'ai une fonction qui ajoute une ligne dans un listview qui estsimilaire à celle-ci:void add_str_listvi Selection multi fichier boite de dialogue [ par DarkBoss ] Salut,j' ouvre la boite de dialogue win pour ouvrir les fichier et on peux selectionner plusieur fichier,ce que je voudrai c' est que l' on puisse rec encore desole mais toujours pas de reponse.... :( [ par DevGizmo ] Bonjour,Encore desole de revenir avec mon probleme mais je n'ai pas d'issue. En effet, je cherche a lire ligne par ligne mon tableau 2D avec un pointe question de c....merci de repondre, c'est urgent svp.... [ par DevGizmo ] Bonjour,Encore desole de revenir avec mon probleme mais je n'ai pas d'issue. En effet, je cherche a lire ligne par ligne mon tableau 2D avec un pointe info-bulle [ par ludo_it ] Salutj'ai un projet avec une CFormView, j'ai créé une boite de dialogue avec des editboxs , lesquelles possèdent des variables membres de type CEdit, une boite de dialogue dans un .dll? [ par catamenia ] bonjours, j'aimerais savoir si il est possible de créer une boite de dialogue dans un .dll.Je n'ai aucun probleme un ajouter une boite de dialogue lor Scroll bar horizontal dans une list box [ par maxpog23 ] Salut,Je developpe une appli WIN32 et jai un ptit pb:Est-ce que qqun peut me dire pourquoi la scrollbar horizontal n'apparait pas quand un element de


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,168 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales