Bibliothèque personnel c:\masm32\persolib |
|
Lignes a ajouter au source PUBLIC InfosFichiers ;section déclarations InfosFichiers WIN32_FIND_DATA <> ;section data Toutes les fonctions de traitement de chaines ne modifient que les registres utilisés pour la réponse Les fonctions de chaines copient le fonctionnement VB,inutile de se demander si elles traitent les chaines terminées par un zéro , ou les chaines terminées par un retour ligne,les deux sont traités pareillement.Les fonctions utilisant leur propre tampon possède un byte a zéro avant le tampon.La scrutation des caractères peut ainsi s'arréter sur un zéro dans un sens ou dans l'autre,rendant impossible tout débordement Librairies devant être présentes dans le source,lz32,user32,kernel32,masm32 |
|
ChargerFichierMem PROTO :DWORD,:DWORD |
|
|
Adresse du nom de fichier,adresse de la structure FichMem en data FichMem struc Hmem dd ? Mpoint dd ? Taille dd ? FichMem ends Prend le chemin courant ,par défaut(utilise SetTestFichier).Test l'existence
du fichier.Rajoute un zero ,en mémoire ,en fin de fichier.Referme
le fichier après l'avoir lu.Succès Hmem,handle
de mémoire,Mpoint pointeur sur le début,Taille,taille
sans compter le zéro,eax différent zero. Utilise les définitions externes suivantes (a ajouter
dans les data du source) |
GetParaLigneCommande PROTO :DWORD,:DWORD |
|
|
Numéro de 0 à N du paramètre voulu,adresse
chaine ou écrire le paramètre Retour eax = 0,plus de paramètres sinon,taille chaine écrite |
LongZtexte PROTO :DWORD,:DWORD |
|
|
Adresse des données,maximum de longueur de recherche |
RetrouveMessageErreur PROTO :DWORD |
|
|
Placer simplement les deux lignes suivantes à l'endroit ou va se produire l'erreur .if eax == INVALID_HANDLE_VALUE ou tout autre InsTxt MsgERR000, "" ; Nom de la fonction ayant echoué invoke RetrouveMessageErreur, ADDR MsgERR000 ; la boite de message .endif C'est tout , le message apparait en français et c'est écoeurant de facilité. |
chercherChaine PROTO :DWORD,:DWORD,:DWORD,:DWORD |
|
|
Position de Début de recherche de 1 à N,adresse de la chaine ou s'effectue la recherche,adresse de la chaîne chercher,0 comparaison binaire ou 1 comparaison litéralle(minus = majus) La longueur de recherche est limité a 256 bytes ,
la longueur de la chaine ou s'effectue la recherche s'arrête
sur un zéro ou un retour ligne |
ScrutationFichierTexte PROTO :DWORD |
|
|
adresse de la structure INFOSTEXTASCII INFOSTEXTASCII struct Hfichier dd 0 Handle , pointeur , taille d'un fichier texte en mémoire Pfichier dd 0 Tfichier dd 0 NBlignesODOA dd 0 le nombre de lignes complètes NBlignes dd 0 le nombre de lignes sans retour ligne,max 1 NumeroLigne dd 0 le numero de ligne voulue LenLigne dd 0 longueur de la ligne NumeroLigne sans le 0D0A Pligne dd 0 Le pointeur sur la ligne de numéro NumeroLigne après 2 ou 3 InfoODOA dd 0 ;se termine par 0D0A ? oui 1 s'applique a la ligne ou au fichier Tache dd 0 de 1 à 4 (fonctions 1 to 4) Hresultat dd 0 réservé,ne rien écrire Presultat dd 0 réservé,ne rien écrire Tresultat dd 0 réservé,ne rien écrire Hsortie dd 0 éventuelle fichier de sortie,placer le handle içi INFOSTEXTASCII
ends
Tache = 1 crée
un tableau (Hresultat) avec le pointeur sur les lignes,leurs
longueurs
Tache = 4 ,ferme tous les handles y compris l'éventuelle fichier de sortie
Cette fonction est réutilisée par MaitreTexte |
CopierFichier PROTO :DWORD,:DWORD |
|
|
adresse du chemin de fichier à copier, adresse du chemin du nouveau fichier Les chemins sont en nom longs,sinon la fonction n'aurait pas d'intérêt retour eax = 0 échec,sinon différent de zéro |
OuvrirLecture PROTO :DWORD |
|
|
Adresse du chemin de fichier à ouvrir en lecture. retour eax = INVALID_HANDLE_VALUE échec , sinon handle du fichier |
OuvrirEcriture PROTO :DWORD |
|
|
Adresse du chemin de fichier à ouvrir en écriture retour eax = INVALID_HANDLE_VALUE échec , sinon handle du fichier |
SetTestFichier PROTO :DWORD |
|
|
adresse du chemin de fichier dont on veut tester l'existence Si pas de chemin,on prend le chemin courant par défaut |
MaitreTexte PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD |
|
|
handle de la fenêtre appelante,adresse d'un nom de fichier désignant le fichier texte a analyser,adresse de INFOSTEXTASCII en data ,adresse d'un nom de fichier désignant le fichier de sortie ou NULL,adresse du proc à appeler (callback fonction) une fois que toutes les opérations sont finis Se charge de toutes les opérations nécessaires pour renseigner ScrutationFichierTexte , le proc appeler n'a plus qu'a utiliser les renseignements fournis par ScrutationFichierTexte positionné en tache 3 par défaut. MaitreTexte
réalise l'équivalent des instructions basiques
(VB6) suivantes: NouveauFonction = "C:\test\sort.txt" reference = FreeFile Open NouveauFonction For Input As #reference '--------------------------------- Dim nouvelleliste() As String ReDim nouvelleliste(1) Dim Etatsnouvelleliste() As Boolean '--------------------------------- Nouveau = "c:\test\header.txt" sortie = FreeFile Open Nouveau For Output As #sortie '--------------------------------- nombre = 1 Do Until EOF(reference) Line Input #reference, ligne nouvelleliste(nombre) = ligne ligne = nouvelleliste(nombre) nombre = nombre + 1 ReDim Preserve nouvelleliste(nombre) passereference: Loop Close reference
test = Len(ligne)
La fonction appeler(callback) n'a plus qu'a analyser les lignes |
"CALLBACK" PROTO :DWORD,:DWORD |
|
|
Handle de la fenêtre appelante,adresse de la structure INFOSTEXTASCII en data renseignée par MaitreTexte La tache par défaut est la tache 3.Onaccède aux lignes de la manière suivante: mov ebx,Infotextascii ;(adresse du tableau) La
callback doit se terminer en refermant tous les handles ouverts
de la maniere suivante mov TEXTE.Tache,4 ;fermer tout,remise a zero structure dans data invoke ScrutationFichierTexte,Infotextascii avec TEXTE TEXTEQU <(INFOSTEXTASCII ptr [ebx])>
La callback tirera un énorme avantage a réutilisé les fonctions , LongZtexte , chercherChaine , Trim , Mid , ChainesEgales,de cette librairie, qui reconnaissent toutes les chaines terminées par un zéro ou un retour ligne, ce qui est le cas içi.Lorsqu'il est nécessaire de créer une nouvelle chaine,ces fonctions renvoient l'adresse d'un tampon ou trouver la nouvelle chaine.Si vous avez l'habitude de VB , vous ne serez pas trop dépaysés. chercherChaine fonctionne comme Instr.
|
TestFichier PROTO :DWORD |
|
|
adresse d'un nom de fichier Se contente de vérifier l'existence du fichier,échec 0,réussite 1 InfosFichiers rempli |
Trim PROTO :DWORD |
|
|
adresse d'une chaine de caractères terminée par un zero ou un 0dh,retour ligne Suprime les espaces,tab en début et fin de chaine,échec
eax=0,réussite eax adresse de la nouvelle chaine,ecx
nombre de caractères de la chaine sans compter le
zéro la chaine doit avoir une longueur maximum de MAX_PATH |
Mid PROTO :DWORD ,:DWORD ,:DWORD |
|
|
adresse de chaine,position de 1 à N,nombre de caractères à extraire ou NULL extrait les caractères de la chaine,échec eax=0,réussite eax adresse de la nouvelle chaine terminée par un zéro,ecx,nombre de caracteres de la nouvelle chaine,sans compter le zéro.Si le nombre de caractères a extraire est NULL,extraction de position à fin de chaine. La chaine initiale peut se terminer par un zéro ou un retour ligne,elle doit avoir une longueur max de MAX_PATH. |
ChainesEgales PROTO :DWORD,:DWORD,:DWORD |
|
|
adresse chaine 1,adresse chaine 2,mode binaire ou littérale (0 ou 1) Les deux chaines peuvent se terminer par un zéro ou un retour ligne.echec eax=0,réussite eax=1. Les deux chaines sont déclarées égales si leurs longueurs sont identiques et si leurs caractères , dans le mode de comparaison choisi ,sont égaux .En mode littéral (1) ,minuscules = majuscules |
Copier PROTO :DWORD,:DWORD |
|
|
Adresse du tampon recevant la copie,adresse de la chaine à copier échec eax,ecx NULL réussite:eax Adresse du tampon recevant la copie,ecx nombre de caractères copier,sans compter le zéro.Cela permet d'enchainer les copies,eax+ecx=nouvel emplacement de copies La chaine à copier peut se terminer par un zero ou un retour ligne,la chaine a copier doit avoir une longueur max de MAX_PATH(260),le nombre de caractères max copier dans le tampon sera de MAX_PATH +1 |
LettreAvantLettreApresmot PROTO :DWORD, :DWORD |
|
|
adresse du mot terminer par un zero,adresse ou se situe ce mot dans une phrase Al contient le code du caractere avant le mot,AH contient
le code du caractere après le mot. |
|
|
|
|
|
|
|
|