Lecture d'un fichier
greg80
-
greg80 -
greg80 -
Bonjour,
dans le cadre d'un stage, je doit compléter un logiciel avec visual c++ 6.
Seulement voilà depuis quelques jours je suis confronté un problème que je n'arrive pas à résoudre. Je doit récupérer les données d'un fichier pour les charger dans une ListCtrl.
Le fichier est de la forme :
50000;-6.205;5.204;7.6999;5.0125
60000;2.0147;-6.254;5.0012;-9.0123
Le fichier comporte 9 colonnes et environ 100 lignes!
Est-ce que quelqu'un aurais une solution à apporter à mon problème.
Pour info je vous joint le code que j'ai déjà tappé :
bool b_result = true;
char format[7];
CString str,str_tmp;
char delim = ';';
long double freq,imped1,adapt1;
long double imped2,adapt2;
long double imped3,adapt3;
long double imped4,adapt4;
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,&imped3,&adapt3,&imped4,&adapt4) == 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);
str_tmp.Format("%1.4lf",imped3);
m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 5,5,str_tmp);
str_tmp.Format("%1.3lf",adapt3);
m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 6,6,str_tmp);
str_tmp.Format("%1.4lf",imped4);
m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 7,7,str_tmp);
str_tmp.Format("%1.3lf",adapt4);
m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 8,8,str_tmp);
}
}
fileBA.Close();
}
return b_result;
}
Ce bout de code me permet de lire uniquement les deux premières colonnes (sur toute les lignes), mais en revanche il me sort n'importe quoi sur les autres colonnes.
dans le cadre d'un stage, je doit compléter un logiciel avec visual c++ 6.
Seulement voilà depuis quelques jours je suis confronté un problème que je n'arrive pas à résoudre. Je doit récupérer les données d'un fichier pour les charger dans une ListCtrl.
Le fichier est de la forme :
50000;-6.205;5.204;7.6999;5.0125
60000;2.0147;-6.254;5.0012;-9.0123
Le fichier comporte 9 colonnes et environ 100 lignes!
Est-ce que quelqu'un aurais une solution à apporter à mon problème.
Pour info je vous joint le code que j'ai déjà tappé :
bool b_result = true;
char format[7];
CString str,str_tmp;
char delim = ';';
long double freq,imped1,adapt1;
long double imped2,adapt2;
long double imped3,adapt3;
long double imped4,adapt4;
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,&imped3,&adapt3,&imped4,&adapt4) == 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);
str_tmp.Format("%1.4lf",imped3);
m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 5,5,str_tmp);
str_tmp.Format("%1.3lf",adapt3);
m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 6,6,str_tmp);
str_tmp.Format("%1.4lf",imped4);
m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 7,7,str_tmp);
str_tmp.Format("%1.3lf",adapt4);
m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 8,8,str_tmp);
}
}
fileBA.Close();
}
return b_result;
}
Ce bout de code me permet de lire uniquement les deux premières colonnes (sur toute les lignes), mais en revanche il me sort n'importe quoi sur les autres colonnes.
A voir également:
- Lecture d'un fichier
- Fichier bin - Guide
- Comment ouvrir un fichier epub ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
2 réponses
Ca a été donné (en C et C++) de nombreuses fois sur le groupe de prog windows :https://groups.google.com/forum/?hl=fr#!forum/fr.comp.os.ms-windows.programmation