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

Signaler
Messages postés
107
Date d'inscription
mardi 2 mars 2004
Statut
Membre
Dernière intervention
5 juillet 2004
-
 theneoiceman -
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

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
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++
Messages postés
107
Date d'inscription
mardi 2 mars 2004
Statut
Membre
Dernière intervention
5 juillet 2004

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
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
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++
Messages postés
107
Date d'inscription
mardi 2 mars 2004
Statut
Membre
Dernière intervention
5 juillet 2004

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
Messages postés
107
Date d'inscription
mardi 2 mars 2004
Statut
Membre
Dernière intervention
5 juillet 2004

c'est quoi le 0x80000000 ?
ça veut dir que le fichier N'existe pas?
et s'il existe?
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
BruNews, pourquoi tu n'utilises pas strrchr

char filaname[] = "fichier.exe";char* ext strrchr(filename, '.'); // ext ".exe"
Messages postés
107
Date d'inscription
mardi 2 mars 2004
Statut
Membre
Dernière intervention
5 juillet 2004

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
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
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++
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
exact, j'avais pas vu ca
alors

char* GetExtensionPtr(char *filename)
{
char* ext = strrchr(filename, '.');
if(strchr(ext, '\\'))
return 0;
return ext;
}
Messages postés
107
Date d'inscription
mardi 2 mars 2004
Statut
Membre
Dernière intervention
5 juillet 2004

BruNews> Réponds moi, c'est lapremière fois que j'utilise GetFileAttributes!!!
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
Enfin avancer et reculer un pointeur pour un quasi nouveau diplome, devrait pas etre grand chose, non ?

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
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++
Messages postés
107
Date d'inscription
mardi 2 mars 2004
Statut
Membre
Dernière intervention
5 juillet 2004

t'es chiant, mais bien calé comme même!!
allez stp!
Messages postés
107
Date d'inscription
mardi 2 mars 2004
Statut
Membre
Dernière intervention
5 juillet 2004

d'acords, c'est parceque dans le msdn c'est de type DWORD et non pas BOOL
Messages postés
107
Date d'inscription
mardi 2 mars 2004
Statut
Membre
Dernière intervention
5 juillet 2004

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
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
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++
Messages postés
107
Date d'inscription
mardi 2 mars 2004
Statut
Membre
Dernière intervention
5 juillet 2004

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
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
oh 1 seconde je teste, tu aurais decouvert un new bug de windows, interessant.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
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++
Messages postés
321
Date d'inscription
dimanche 22 octobre 2000
Statut
Membre
Dernière intervention
14 mai 2005
2
ç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