Découper une chaîne da caractères à partir d'un caratère point"."

oudkaramla Messages postés 107 Date d'inscription mardi 2 mars 2004 Statut Membre Dernière intervention 5 juillet 2004 - 1 juil. 2004 à 12:07
 theneoiceman - 3 juil. 2004 à 14:10
salut tout le monde,

j'ai un problème:

si j'ai une chaîne de caractère(nom du fichier par exemple) dont je ne sais pas la longeur, comment je fais pour récupérer l'extension toute seule et la partie sans extesion toute seule(l'extension est par exemple .tif)
la longeur n'est à priorie pas connue: c'est l'utilisateur qui tape le nom du fichier

merci

21 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
1 juil. 2004 à 12:37
char* GetExtensionPtr(char *flname)
{
char *c, *p;
// VERIF AVANT SI EST BIEN FICHIE EXISTANT
if(GetFileAttributes(szfile) & 0x80000000) return 0;
p = flname + 4;
while(*c) c++; // arrive zero final
while(c >= p) {
if(*c == '.') return c;
if(*c == '\\') break;
c--;
}
return 0; // pas d'extension
}

ciao...
BruNews, Admin CS, MVP Visual C++
0
oudkaramla Messages postés 107 Date d'inscription mardi 2 mars 2004 Statut Membre Dernière intervention 5 juillet 2004
1 juil. 2004 à 13:59
merci,
mais j'ai ps trop bien compris
il n' y a pas une methode avec lesdeux fonctions (strrchr et strlen)
je veux savoir comment manipuler ces deux fonctions pour récupérer la sous chaîne da caractère avant le point de l'extension
je crois que je vais trouver
merci
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
1 juil. 2004 à 14:16
y avait erreur de frappe plus haut:
char* GetExtensionPtr(char *flname)
{
char *c, *p;
// VERIF AVANT SI EST BIEN FICHIE EXISTANT
if(GetFileAttributes(flname) & 0x80000000) return 0;
p = flname + 4;
while(*c) c++; // arrive zero final
while(--c > p) {
if(*c == '.') return c;
if(*c == '\\') break;
}
return 0; // pas d'extension
}

si vraiment tu tiens a decouper mais je ne vois pas a quoi cela sert puisque tu as le pointeur sur le '.' non ?
char szfile[264]; // doit contenir nom du fichier
char szext[12];
char *c;

if(c = GetExtensionPtr(szfile)) {
strcpy(szext, c);
*c = 0; // tronque original
}
else {szfile[0] = szext[0] = 0;}

ciao...
BruNews, Admin CS, MVP Visual C++
0
oudkaramla Messages postés 107 Date d'inscription mardi 2 mars 2004 Statut Membre Dernière intervention 5 juillet 2004
1 juil. 2004 à 15:17
merci,
c'est trop compliqué pour moi comment savoir si un fichier existe ou pas( des commandes simples svp) avec GetFileAttributes: j'ai vue la définition de GetFileAttributes dans la MSDN il n'a y a aucune allusion à l'existence ou non du fichier voilà

merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
oudkaramla Messages postés 107 Date d'inscription mardi 2 mars 2004 Statut Membre Dernière intervention 5 juillet 2004
1 juil. 2004 à 15:22
c'est quoi le 0x80000000 ?
ça veut dir que le fichier N'existe pas?
et s'il existe?
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
1 juil. 2004 à 15:46
BruNews, pourquoi tu n'utilises pas strrchr

char filaname[] = "fichier.exe";char* ext strrchr(filename, '.'); // ext ".exe"
0
oudkaramla Messages postés 107 Date d'inscription mardi 2 mars 2004 Statut Membre Dernière intervention 5 juillet 2004
1 juil. 2004 à 15:58
en fait j'ai fait :
GetFileAttributes(g_theFilePath);
printf("DWORD GetFileAttributes :%s\n",attribut);

la compilation passe bien mais quand j'éxécute le programme s'arrête juste avant le GetFileAttributes(g_theFilePath);!

je ne sais pas pourquoi
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
1 juil. 2004 à 15:59
vecchio56 > NENNI, tu peux avoir un point dans un nom de dossier et pour autant aucune extension au fichier.

ciao...
BruNews, Admin CS, MVP Visual C++
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
1 juil. 2004 à 16:02
exact, j'avais pas vu ca
alors

char* GetExtensionPtr(char *filename)
{
char* ext = strrchr(filename, '.');
if(strchr(ext, '\\'))
return 0;
return ext;
}
0
oudkaramla Messages postés 107 Date d'inscription mardi 2 mars 2004 Statut Membre Dernière intervention 5 juillet 2004
1 juil. 2004 à 16:05
BruNews> Réponds moi, c'est lapremière fois que j'utilise GetFileAttributes!!!
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
1 juil. 2004 à 16:06
Enfin avancer et reculer un pointeur pour un quasi nouveau diplome, devrait pas etre grand chose, non ?

ciao...
BruNews, Admin CS, MVP Visual C++
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
1 juil. 2004 à 16:12
KouaKiYa, GetFileAttributes est mechant ? on va le dresser.
si fichier n'existe pas, c'est le seul cas ou le bit 31 est positionne donc:
if(GetFileAttributes(szfile) & 0x80000000) ABSENT
Jusque la tout va bon ? sinon tant pis...

if(!(GetFileAttributes(szfile) & 0x80000000)) PRESENT
c'etait dur ?

ciao...
BruNews, Admin CS, MVP Visual C++
0
oudkaramla Messages postés 107 Date d'inscription mardi 2 mars 2004 Statut Membre Dernière intervention 5 juillet 2004
1 juil. 2004 à 16:13
t'es chiant, mais bien calé comme même!!
allez stp!
0
oudkaramla Messages postés 107 Date d'inscription mardi 2 mars 2004 Statut Membre Dernière intervention 5 juillet 2004
1 juil. 2004 à 16:30
d'acords, c'est parceque dans le msdn c'est de type DWORD et non pas BOOL
0
oudkaramla Messages postés 107 Date d'inscription mardi 2 mars 2004 Statut Membre Dernière intervention 5 juillet 2004
1 juil. 2004 à 16:57
BruNews>
Ton truc ne marche trés bien ilm'indique que le fichier est absent alors que je sais qu'il est préesent!

vous pouvez jeter un coup d'oiel sur mon petit truc:

if(GetFileAttributes(g_theFilePath)& 0x80000000) 
{
printf("absent\n");
MoveFile(g_theFilePath,g_NomFichierTiff);
printf("GetLastError:%d\n",GetLastError());

}
else
{

printf("PRESENT\n");
if(DeleteFile(g_theFilePath))
{
MoveFile(g_theFilePath,g_NomFichierTiff);
}
else
{
printf("problem dans l'ilimination du fichier existant\n");
}

}

}



merci
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
1 juil. 2004 à 17:11
GetFileAttributes s'emploie comme j'ai dit.
Par contre plus loin:
if(DeleteFile(g_theFilePath)) et ensuite tu veux le copier ou renommer, y a pas un probleme dans ton affaire ?
Serait pas plutot g_NomFichierTiff qu'il faudrait delete ???

ciao...
BruNews, Admin CS, MVP Visual C++
0
oudkaramla Messages postés 107 Date d'inscription mardi 2 mars 2004 Statut Membre Dernière intervention 5 juillet 2004
1 juil. 2004 à 17:20
BruNews>
non j'indique un nom qui n'existe pas, le programme vas dans le deuxième cas càd PRESENT!
je ne sais pas pourquoi

merci
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
1 juil. 2004 à 17:23
oh 1 seconde je teste, tu aurais decouvert un new bug de windows, interessant.

ciao...
BruNews, Admin CS, MVP Visual C++
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
1 juil. 2004 à 17:30
Desole mais j'ai beau mettre les nom les plus farfelus que j'ai trouves, pas moyen qu'il se trompe, des que j'en mets un vrai il repond 'present'.
MessageBox(0, (GetFileAttributes("D:\\Classeur1.xls") & 0x80000000) ? "ABSENT": "PRESENT", szappname, 0);

ciao...
BruNews, Admin CS, MVP Visual C++
0
jockos Messages postés 321 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 14 mai 2005 2
2 juil. 2004 à 11:37
ça dépend peut être du Windows (95/98 ou NT4/2000/XP) ?

Ou alors oudkaramla , vérifie g_theFilePath avant d'utiliser GetFilesAttributes en faisant :

printf("%s\n", g_theFilePath);

A+

Jock
0
Rejoignez-nous