Problème de traitement d'un fichier CSV
Bonjours tout le monde :D
J'ai besoin d'un petit coup de main sur un problème que je n'arrive pas à résoudre.
Code:
1 2 3 4 5 6 7 8 9
|
char **szParams = NULL;
CString FID_Trie [1000];
CString szCLine = "";
CString szpStrL = "";
list<CString> pStrL;
list<CString>::iterator iStrL; |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
//Ouverture du fichier CSV
fileConf = fopen(::szFileName5,"r");
if (fileConf != NULL)
{
while (! feof(fileConf))
{
fgets(szLine,cst_iMaxLineSize,fileConf);
szCLine = szLine;
if(i != 0)
{
szParams = split(szLine,';');
szType = atoi(szParams[2]);
if(strlen(szCLine)>1)
{
if (strcmp(szParams[2],szType1) == 0)
{
//Ajout dans la pile le contenu de la colonne 2 du fichier CSV
pStrL.push_back(szParams[1]);
//Ajout dans le tableau de la ligne entière non splité
FID_Trie[j] = szCLine;
j++;
}
}
}
i++;
}
fclose(fileConf);
}
//Tri la pile
pStrL.sort();
while (!pStrL.empty())
{
szpStrL = pStrL.front();
for(i=0;i<j;i++)
{
//Ligne qui pose problème
szParams = split((char*)LPCTSTR(FID_Trie[i]),';');
itoa(i,vue,10);
vue[1] = '\0';
LogMessage("%s,%s,%s,%s%s"(CString)vue,szParams[0],szParams[1],szParams[2],szParams[3],szParams[4]);
}
pStrL.pop_front();
} |
Enfin ma fonction split :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
char** split(char* str, const char c)
{
static char* tmp[2048]; //max 2048 colonnes
int current = 0;
tmp[current++] = str;
while (*str)
{
if(*str == c)
{
*str = '\0';
tmp[current++] = str+1;
}
++str;
}
tmp[current]=0;
return tmp;
} |
Fichier CSV :
1;1AS100;ACCES SURETE;CLA001.AS.ACC.001.
2;1AS101;ACCES SURETE;CLA001.AS.ACC.002.
3;1AS103;ACCES SURETE;CLA001.AS.ACC.003.
4;1CC100;IST SURETE;SRV001.CC.AAA.004.
5;1AS104;ACCES SURETE;CLA001.AS.ACC.005.
6;1AS102;ACCES SURETE;CLA001.AS.ACC.006.
Je vous donne les logs :
http://nsa11.casimages.com/img/2009/...5029610898.jpg
Mon problème est le suivant :
Lorsque je suis dans 'for(i=0;i<j;i++)' , ma fonction split modifie le contenu de FID_Trie alors que je ne le souhaite pas :aie: szParams = split((char*)LPCTSTR(FID_Trie[i]),';');
Pour le second élément dans ma pile, le tableau est alors null. Je n'y comprends plus rien ....
La finalité est de trier par ordre alphabétique le contenu de mon fichier CSV.