Accueil > > > FONCTIONS DE TRAITEMENT RAPIDE DE CHAINES ET FICHIER
FONCTIONS DE TRAITEMENT RAPIDE DE CHAINES ET FICHIER
Information sur la source
Description
C'est une librairie qui reprend une partie des fonctions de stdio.h et string.h mais avec de l'assembleur dedans. Gain de vitesse important ! D'autres fonctions permettent de copier un fichier, savoir si il existe ou quelle est sa taille. attention : c++ builder professionel recommandé, parcce que sinon il faut retoucher le code.
Source
- #include <vcl.h>
- #include <dir.h>
- #include <stdio.h>
- #include "text.h"
- #pragma hdrstop
- #pragma inline
-
- //---------------------------------------------------------------------------
- //---------------------------------------------------------------------------
-
- void tomin(char *ZString); // convertir une chaine en minuscules
- void tomaj(char *ZString); // convertir une chaine en majuscules
- char Tolower(char ZString); //
- char Toupper(char ZString); // convertit un caractere en
- void Strcpy(char *ch1, char *ch2);
- void Strcat(char *ch1, char *ch2);
- int Atoi(char *ZString);// convertit une chaine en integer
- unsigned int Strlen(char *ZString); // retourne la longueur d'une chaine
-
- bool file_available(char *mossieu); // retourne vrai si fichier existeu
- long filesize(FILE *safe); // retourne la taille d'un fichier ouvert
- void copyfile(char *setFrench,char *getFrench);// copier un fichier
- void ajouter_mot_au_fichier(FILE *fichier, char *chemin,char *mot);
- int trouvermot_dans_fichier(FILE *fichier, char *tst);
-
-
- //---------------------------------------------------------------------------
- //---------------------------------------------------------------------------
- // tomin: convertit une chaine en minuscules
- void tomin(char *ZString)
- {
- asm{
- mov ecx,ZString
- debut2:
- mov al, BYTE PTR [ecx]
- cmp al,0
- je short fin2
- cmp al, 41h
- jb short inter2
- cmp al, 5Ah
- ja short inter2
- or al, 20h
- mov BYTE PTR [ecx], al
- inter2:
- inc ecx
- jmp short debut2
- fin2:
- mov ecx, [ZString]
- }
- }
-
- //---------------------------------------------------------------------------
- // tomaj: convertit une chaine en majuscules
- void tomaj(char *ZString)
- {
- asm{
- mov edx,ZString
- debut:
- mov al, BYTE PTR [ecx]
- cmp al,0
- je short fin
- cmp al, 61h
- jb short inter
- cmp al, 7Ah
- ja short inter
- and al, 0DFh
- mov BYTE PTR [ecx], al
- inter:
- inc ecx
- jmp short debut
- fin:
- mov ecx, [ZString]
- }
- }
-
- //---------------------------------------------------------------------------
- char Tolower(char ZString)
- {
- asm{
- mov al, ZString
- cmp al,0 // ==0
- je short fini
- cmp al, 41h // <'A'
- jb short fini
- cmp al, 5Ah // >'Z'
- ja short fini
- or al, 20h // minusculiser
- fini:
- }
- }
-
- //---------------------------------------------------------------------------
- char Toupper(char ZString)
- {
- asm
- {
- mov al, ZString
- cmp al,0 // ==0
- je short fini2
- cmp al, 61h // <'a'
- jb short fini2
- cmp al, 7Ah // >'z'
- ja short fini2
- and al, 0DFh // majusculiser
- fini2:
- }
- }
-
- //---------------------------------------------------------------------------
- // la même que dans string.h ou stdio, mais en assembleur
- void Strcpy(char *ch1, char *ch2)
- {
- asm
- {
- mov edx,ch1
- mov ecx,ch2
- debutas:////////
- mov al, byte ptr [ecx]
- cmp al,0 // si code ascii= 0
- je short endas // alors fin
- mov byte ptr [edx], al // sinon copier ds cible
- inc ecx // incrementer source
- inc edx // incrementer cible
- jmp short debutas // retour boucle
- endas:///////// // fin boucle
- mov byte ptr [edx], 0 // 0 pour finir chaine
- mov ch1,edx
- }
- }
-
- //---------------------------------------------------------------------------
- void Strcat(char *ch1, char *ch2)
- {
- asm
- {
- mov edx,ch1
- mov ecx,ch2
- debut03:
- mov al, byte ptr [edx]
- cmp al,0
- je short mid03
- inc edx
- jmp short debut03
- mid03:
- mov al, byte ptr [ecx]
- cmp al,0
- je short end04
- mov byte ptr [edx], al
- inc ecx
- inc edx
- jmp short mid03
- end04:
- mov byte ptr [edx],0
- }
- }
-
- //---------------------------------------------------------------------------
- // Atoi: convertit une chaine en integer
- int Atoi(char *ZString)
- {
- int base=10;
- int valeur=0;
-
- asm{
- mov ecx,ZString
- xor bh, 0
- DEBU8: // debut boucle
- mov bl, BYTE PTR [ecx] // chercher l'ofset
- cmp bl, 030h // si < '0'
- jb short Fin8 // fin
- cmp bl, 039h // si > '9'
- ja short Fin8 // fin
- and bl ,0CFh // soustraire '0' soit 48
- mul base // multiplier par 10
- add ax, bx // ajouter nouveau chiffre
- inc ecx // caractere suivant
- jmp short DEBU8
- Fin8:
- mov word ptr [valeur], ax
- }
- }
-
- //---------------------------------------------------------------------------
- // strlen: retourne la longueur d'une chaine
- unsigned int Strlen(char *ZString)
- {
- int lon=0;
- asm{
- xor eax,0
- mov ecx,ZString
- debut9:
- cmp BYTE PTR [ecx],0 // si fin de chaine
- je short fin9 // saut fin boucle
- inc eax // sinon
- inc ecx // incrementer
- jmp short debut9 // retour boucle
- fin9: // fin boucle
- mov dword ptr [lon], eax
- }
- }
-
- //---------------------------------------------------------------------------
- // filesize: retourne la taille du fichier (qui doit etre ouvert)
-
-
- long filesize(FILE *safe)
- {
- long curpos, length;
-
- curpos = ftell(safe);
- fseek(safe, 0L, SEEK_END);
- length = ftell(safe);
- fseek(safe, curpos, SEEK_SET);// remettre la position initiale
-
- return length;
- }
-
- //---------------------------------------------------------------------------
- // file_available : retourne vrai si le fichier existe
-
- bool file_available(char *nomfichier)
- {
- FILE *safe;
- if((safe=fopen(nomfichier,"rb"))!=NULL)
- {
- fclose(safe);
- return true;
- }
- else
- return false;
- }
-
- //---------------------------------------------------------------------------
-
- void copyfile(char *setFrench,char *getFrench)
- {
- FILE *source, *cible;
- source =fopen(setFrench,"rb");
- cible =fopen(getFrench,"wb");
-
- while(true)
- {
- register c=fgetc(source);
- if(feof(source))break;
- fputc(c,cible);
- }
-
- fclose(cible);
- fclose(source);
- }
-
- //---------------------------------------------------------------------------
-
- void ajouter_mot_au_fichier(FILE *fichier, char *chemin,char *mot)
- {
-
- if ((fichier=fopen(chemin,"a"))!=NULL)
- {
- fprintf(fichier,"%s\n",mot);
- fclose(fichier);
- }
- }
-
- //---------------------------------------------------------------------------
-
- int trouvermot_dans_fichier(FILE *fichier, char *tst)
- {
-
- fpos_t filepos=0;
- fsetpos(fichier,&filepos);
- bool bFin=false,bFound=false;
-
- do
- { // boucle fichier cible
- char msg[256];
- fscanf(fichier,"%s",msg);
- //si mot trouvé alors sortie boucle fichier cible
- if(tst[0]==msg[0] /*&& strlen(tst)==strlen(msg)*/)
- {
- if( !strcmp(msg,tst) )
- {
- bFin=true;
- bFound=true;
- }
- }
-
- if(feof(fichier))
- {
- bFin=true;
- }
- }
- while(!bFin);
-
- return (bFound);
- }
-
- //------------------------------------------------------------------------
-
#include <vcl.h>
#include <dir.h>
#include <stdio.h>
#include "text.h"
#pragma hdrstop
#pragma inline
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void tomin(char *ZString); // convertir une chaine en minuscules
void tomaj(char *ZString); // convertir une chaine en majuscules
char Tolower(char ZString); //
char Toupper(char ZString); // convertit un caractere en
void Strcpy(char *ch1, char *ch2);
void Strcat(char *ch1, char *ch2);
int Atoi(char *ZString);// convertit une chaine en integer
unsigned int Strlen(char *ZString); // retourne la longueur d'une chaine
bool file_available(char *mossieu); // retourne vrai si fichier existeu
long filesize(FILE *safe); // retourne la taille d'un fichier ouvert
void copyfile(char *setFrench,char *getFrench);// copier un fichier
void ajouter_mot_au_fichier(FILE *fichier, char *chemin,char *mot);
int trouvermot_dans_fichier(FILE *fichier, char *tst);
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
// tomin: convertit une chaine en minuscules
void tomin(char *ZString)
{
asm{
mov ecx,ZString
debut2:
mov al, BYTE PTR [ecx]
cmp al,0
je short fin2
cmp al, 41h
jb short inter2
cmp al, 5Ah
ja short inter2
or al, 20h
mov BYTE PTR [ecx], al
inter2:
inc ecx
jmp short debut2
fin2:
mov ecx, [ZString]
}
}
//---------------------------------------------------------------------------
// tomaj: convertit une chaine en majuscules
void tomaj(char *ZString)
{
asm{
mov edx,ZString
debut:
mov al, BYTE PTR [ecx]
cmp al,0
je short fin
cmp al, 61h
jb short inter
cmp al, 7Ah
ja short inter
and al, 0DFh
mov BYTE PTR [ecx], al
inter:
inc ecx
jmp short debut
fin:
mov ecx, [ZString]
}
}
//---------------------------------------------------------------------------
char Tolower(char ZString)
{
asm{
mov al, ZString
cmp al,0 // ==0
je short fini
cmp al, 41h // <'A'
jb short fini
cmp al, 5Ah // >'Z'
ja short fini
or al, 20h // minusculiser
fini:
}
}
//---------------------------------------------------------------------------
char Toupper(char ZString)
{
asm
{
mov al, ZString
cmp al,0 // ==0
je short fini2
cmp al, 61h // <'a'
jb short fini2
cmp al, 7Ah // >'z'
ja short fini2
and al, 0DFh // majusculiser
fini2:
}
}
//---------------------------------------------------------------------------
// la même que dans string.h ou stdio, mais en assembleur
void Strcpy(char *ch1, char *ch2)
{
asm
{
mov edx,ch1
mov ecx,ch2
debutas:////////
mov al, byte ptr [ecx]
cmp al,0 // si code ascii= 0
je short endas // alors fin
mov byte ptr [edx], al // sinon copier ds cible
inc ecx // incrementer source
inc edx // incrementer cible
jmp short debutas // retour boucle
endas:///////// // fin boucle
mov byte ptr [edx], 0 // 0 pour finir chaine
mov ch1,edx
}
}
//---------------------------------------------------------------------------
void Strcat(char *ch1, char *ch2)
{
asm
{
mov edx,ch1
mov ecx,ch2
debut03:
mov al, byte ptr [edx]
cmp al,0
je short mid03
inc edx
jmp short debut03
mid03:
mov al, byte ptr [ecx]
cmp al,0
je short end04
mov byte ptr [edx], al
inc ecx
inc edx
jmp short mid03
end04:
mov byte ptr [edx],0
}
}
//---------------------------------------------------------------------------
// Atoi: convertit une chaine en integer
int Atoi(char *ZString)
{
int base=10;
int valeur=0;
asm{
mov ecx,ZString
xor bh, 0
DEBU8: // debut boucle
mov bl, BYTE PTR [ecx] // chercher l'ofset
cmp bl, 030h // si < '0'
jb short Fin8 // fin
cmp bl, 039h // si > '9'
ja short Fin8 // fin
and bl ,0CFh // soustraire '0' soit 48
mul base // multiplier par 10
add ax, bx // ajouter nouveau chiffre
inc ecx // caractere suivant
jmp short DEBU8
Fin8:
mov word ptr [valeur], ax
}
}
//---------------------------------------------------------------------------
// strlen: retourne la longueur d'une chaine
unsigned int Strlen(char *ZString)
{
int lon=0;
asm{
xor eax,0
mov ecx,ZString
debut9:
cmp BYTE PTR [ecx],0 // si fin de chaine
je short fin9 // saut fin boucle
inc eax // sinon
inc ecx // incrementer
jmp short debut9 // retour boucle
fin9: // fin boucle
mov dword ptr [lon], eax
}
}
//---------------------------------------------------------------------------
// filesize: retourne la taille du fichier (qui doit etre ouvert)
long filesize(FILE *safe)
{
long curpos, length;
curpos = ftell(safe);
fseek(safe, 0L, SEEK_END);
length = ftell(safe);
fseek(safe, curpos, SEEK_SET);// remettre la position initiale
return length;
}
//---------------------------------------------------------------------------
// file_available : retourne vrai si le fichier existe
bool file_available(char *nomfichier)
{
FILE *safe;
if((safe=fopen(nomfichier,"rb"))!=NULL)
{
fclose(safe);
return true;
}
else
return false;
}
//---------------------------------------------------------------------------
void copyfile(char *setFrench,char *getFrench)
{
FILE *source, *cible;
source =fopen(setFrench,"rb");
cible =fopen(getFrench,"wb");
while(true)
{
register c=fgetc(source);
if(feof(source))break;
fputc(c,cible);
}
fclose(cible);
fclose(source);
}
//---------------------------------------------------------------------------
void ajouter_mot_au_fichier(FILE *fichier, char *chemin,char *mot)
{
if ((fichier=fopen(chemin,"a"))!=NULL)
{
fprintf(fichier,"%s\n",mot);
fclose(fichier);
}
}
//---------------------------------------------------------------------------
int trouvermot_dans_fichier(FILE *fichier, char *tst)
{
fpos_t filepos=0;
fsetpos(fichier,&filepos);
bool bFin=false,bFound=false;
do
{ // boucle fichier cible
char msg[256];
fscanf(fichier,"%s",msg);
//si mot trouvé alors sortie boucle fichier cible
if(tst[0]==msg[0] /*&& strlen(tst)==strlen(msg)*/)
{
if( !strcmp(msg,tst) )
{
bFin=true;
bFound=true;
}
}
if(feof(fichier))
{
bFin=true;
}
}
while(!bFin);
return (bFound);
}
//------------------------------------------------------------------------
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
nom de fichier variable [ par Orkblutt ]
salut,en gros voila ce ke je veux faire:char* chaine="Fichier.txt";ofstream fich(chaine);ceci ne me cré pas d'erreur de compil mais par contre le fich
nom de fichier variable [ par Orkblutt ]
salut,en gros voila ce ke je veux faire:char* chaine="Fichier.txt";ofstream fich(chaine);ceci ne me cré pas d'erreur de compil mais par contre le fich
nom de fichier variable [ par Orkblutt ]
salut,en gros voila ce ke je veux faire:char* chaine="Fichier.txt";ofstream fich(chaine);ceci ne me cré pas d'erreur de compil mais par contre le fich
PROBLEME pour retourner un char* a partir d'un fichier [ par kobee12 ]
Voici ma fonction. Elle prend en argument un caractere. A partir de ce caractere, elle renvoie la chaine qui lui est associe.Par exemple:"fichier_lang
PROBLEME pour retourner un char* apres recuperation d'une chaine(sscanf) d'un fichier [ par kobee12 ]
Voici ma fonction. Elle prend en argument un caractere. A partir de ce caractere, elle renvoie la chaine qui lui est associe.Par exemple:"fichier_lang
Exploitation de fichier en C ?!?!?! [ par GazGaz ]
lu allalors voila le truc c'est que je voudrais aller chercher des infos dans un fichier qui est structuré de la meme maniere lignes apres lignes. Je
chaine de caractères et fichier [ par wanny ]
Bonjour.Je voudrais savoir comment faire pour supprimer une chaine de caractères spécifiques dans un fichier texte...Merci d'avance.wanny
fichier txt [ par freerider76 ]
Bonjour je voudrais savoir comment faire pour changer une chaine de caractere dans un fichier txt, parce là je vois pas; en fait je pars comme ça et i
chaine binaire ou non [ par Anacr0x ]
Voila mon problème : je recoit en temps normal par socket une chaine que j'afiche ds un edit, seulement, j'ai crée un systeme d'envoi de fichier qui p
gestion de fichier [ par franc015 ]
salut !!!voila je débute et je dois faire un prog. je dispose d'un fichier texte ( en fait une liste de fichier avec des retours chariot entre chaque
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
MATRICE TEMPLATEMATRICE TEMPLATE par hjr2610
Cliquez pour lire la suite par hjr2610 RE : SAC A DOS RE : SAC A DOS par hadjkaddour
Cliquez pour lire la suite par hadjkaddour
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|