Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Editeur de fichiers INI Ven 2 Mar 2012 - 19:11 | |
| J'ai fait un petit éditeur de fichiers INI - IniEdit.bas. Un tel fichier est composé de lignes du type NomDuMotClé=Valeur Le caractère ";" introduit un commentaire - tout ce qui suit est ignoré. Par défaut, le programme cherche le fichier dans le répertoire où se trouve l'exécutable tu programme. Si on l'exécute à partir de l'éditeur, il utilise par défaut C:\temp\. Mais dans tous les cas, le répertoire peut être changé. Toutes les fonctions sont accessibles à travers un menu. - Code:
-
' IniEdit.bas
' règles: ' - commentaire: tout ce qui suit un ";" ' - composition de la ligne: ' libelle=valeur ' - les lignes blanches sont éliminées
label labels : gosub labels gosub variables gosub GUI gosub initialisations end
labels: label variables, GUI, initialisations label charger_ini, sortir, ouvrir, restaurer, ajouter, supprimer label enregistrer, enregistrer_sous, confirmer, nouveau label aide, close_aide, apropos, close_apropos label modif_valeur, close_modif, modif_libelle, modif_comment label click_grid return
variables: dim no%, no1%, no2%, n_lignes% dim rep$, s$, nom_ini$, nl$, i%, l$, v$, c$ dim x%, y%, l%, c%, n_max% dim flag_charge%, flag_modif%, flag_libelle% dim no_opendialog%, no_savedialog% dim no_menu%, no_grid%, no_modif%, no_menu_1% dim no_aide%, no_apropos%, version$, creation$ return
GUI: on_close 0,confirmer width 0,700 no% = no% + 1 : open_dialog no% : no_opendialog% = no% filter no%,"Fichier initialisation|*.ini" no% = no% + 1 : save_dialog no% : no_savedialog% = no% filter no%,"Fichier initialisation|*.ini"
no% = no%+1 : grid no% : top no%,10 : left no%,10 grid_column no%,4 : grid_row no%,15 : no_grid% = no% grid_one_column_width no%,1,50 grid_one_column_width no%,2,200 grid_one_column_width no%,3,200 grid_one_column_width no%,4,200 height no%,360 : width no%,675 grid_write no%,1,1,"Numéro" grid_write no%,1,2,"Paramètre" grid_write no%,1,3,"Valeur" grid_write no%,1,4,"Commentaire" on_click no%,click_grid no% = no%+1 : form no% : hide no% : no_modif% = no% hide no% : width no%,250 : on_close no%,close_modif top no%,100 : left no%,100 no% = no%+1 : alpha no% : parent no%,no_modif% top no%,20 : left no%,20 no% = no%+1 : edit no% : parent no%,no_modif% top no%,40 : left no%,20 : width no%,200
no% = no%+1 : form no% : hide no% : no_aide% = no% hide no% : width no%,320 : height no%,300 on_close no%,close_aide top no%,100 : left no%,100 : caption no%, "Aide" no% = no%+1 : alpha no% : parent no%,no_aide% top no%,30 : left no%,30
no% = no%+1 : form no% : hide no% : no_apropos% = no% hide no% : width no%,250 : on_close no%,close_apropos top no%,100 : left no%,100 : caption no%, "A-propos" no% = no%+1 : alpha no% : parent no%,no_apropos% top no%,30 : left no%,30
no% = no%+1 : main_menu no% : no1% = no% no% = no%+1 : sub_menu no% : parent no%,no1% caption no%, "Fichiers" : no2% = no% no% = no%+1 : sub_menu no% : parent no%,no2% caption no%, "Nouveau" on_click no%,nouveau no% = no%+1 : sub_menu no% : parent no%,no2% caption no%, "Ouvrir..." on_click no%,ouvrir no% = no%+1 : sub_menu no% : parent no%,no2% : no_menu% = no% caption no%, "Restaurer" : inactive no% on_click no%,restaurer no% = no%+1 : sub_menu no% : parent no%,no2% caption no%, "Enregistrer" : inactive no% on_click no%,enregistrer no% = no%+1 : sub_menu no% : parent no%,no2% caption no%, "Enregistrer sous..." : inactive no% on_click no%,enregistrer_sous no% = no%+1 : sub_menu no% : parent no%,no2% caption no%, "-----------" no% = no%+1 : sub_menu no% : parent no%,no2% caption no%, "Sortir" on_click no%,sortir no% = no%+1 : sub_menu no% : parent no%,no1% caption no%, "Edition" : no2% = no% no% = no%+1 : sub_menu no% : parent no%,no2% caption no%, "Ajouter" on_click no%,ajouter no% = no%+1 : sub_menu no% : parent no%,no2% : no_menu_1% = no% caption no%, "Modifier libellé" : inactive no% on_click no%,modif_libelle no% = no%+1 : sub_menu no% : parent no%,no2% caption no%, "Modifier valeur" on_click no%,modif_valeur : inactive no% no% = no%+1 : sub_menu no% : parent no%,no2% caption no%, "Modifier commentaire" on_click no%,modif_comment : inactive no% no% = no%+1 : sub_menu no% : parent no%,no2% caption no%, "Supprimer" : inactive no% on_click no%,supprimer no% = no%+1 : sub_menu no% : parent no%,no1% caption no%, "Aide" : no2% = no% no% = no%+1 : sub_menu no% : parent no%,no2% caption no%, "Aide" on_click no%,Aide no% = no%+1 : sub_menu no% : parent no%,no2% caption no%, "A-propos" on_click no%,apropos
return sortir: gosub confirmer if i%=1 then terminate return
confirmer: i% = 0 if flag_modif%=1 s$ = "Les valeurs actuelles ne sont pas sauvegardées." s$ = s$ + nl$ + "Voulez-vous sortir quand-même ?" if message_confirmation_yes_no(s$)<>1 then return end_if i% = 1 return initialisations: rep$ = file_extract_path$(param_value$(0)) if instr(rep$,"LOCAL")>0 then rep$ = "C:\temp\" nom_ini$ = "test.ini" dir_dialog no_opendialog%,rep$ dir_dialog no_savedialog%,rep$ nl$ = chr$(13) + chr$(10) n_max% = 15 version$ = "V1.05" creation$ = "6 Mars 2012" n_lignes% = 2 grid_write no_grid%,2,1,"1" grid_write no_grid%,2,4,"; fichier ini créé le "+date$+" à "+time$+" heures" return nouveau: if flag_modif%=1 s$ = "Les valeurs actuelles ne sont pas sauvegardées." s$ = s$ + nl$ + "Voulez-vous les écarter ?" if message_confirmation_yes_no(s$)<>1 then return end_if if n_lignes%>1 for i%=2 to n_lignes% grid_write no_grid%,i%,1,"" grid_write no_grid%,i%,2,"" grid_write no_grid%,i%,3,"" grid_write no_grid%,i%,4,"" next i% end_if l% = 0 c% = 0 n_lignes% = 2 grid_write no_grid%,2,1,"1" grid_write no_grid%,2,4,"; fichier ini créé le "+date$+" à "+time$+" heures" flag_charge% = 0 flag_modif% = 0 inactive no_menu% inactive no_menu%+1 inactive no_menu%+2 return ouvrir: s$ = file_name$(no_opendialog%) if s$="_" then return restaurer: nom_ini$ = s$ if n_lignes%>1 for i%=2 to n_lignes% grid_write no_grid%,i%,1,"" grid_write no_grid%,i%,2,"" grid_write no_grid%,i%,3,"" grid_write no_grid%,i%,4,"" next i% end_if n_lignes% = 1 gosub charger_ini flag_charge% = 1 flag_modif% = 0 active no_menu% active no_menu%+1 active no_menu%+2 return enregistrer_sous: s$ = file_name$(no_savedialog%) if s$="_" then return if instr(right$(s$,5),".")=0 then s$ = s$ + ".ini" nom_ini$ = s$ enregistrer: file_open_write 1,nom_ini$ file_writeln 1,"; fichier ini créé le "+date$+" à "+time$+" heures" if n_lignes%>2 for i%=3 to n_lignes% s$ = grid_read$(no_grid%,i%,2) l$ = grid_read$(no_grid%,i%,3) c$ = grid_read$(no_grid%,i%,4) if len(s$)>0 then s$ = s$ + " = " if i%=l% if left$(l$,4)="==> " then l$ = mid$(l$,5,len(l$)) if left$(c$,4)="==> " then c$ = mid$(c$,5,len(c$)) end_if if len(c$)>0 then c$ = " ; " + c$ s$ = s$ + l$ + c$ if len(s$)>0 then file_writeln 1,s$ next i% end_if file_close 1 flag_modif% = 0 return charger_ini: if file_exists(nom_ini$)=0 file_open_write 1,rep$+nom_ini$ file_writeln 1,"; fichier initialisation" file_close 1 end_if file_open_read 1,nom_ini$ while file_eof(1)=0 file_readln 1,s$ s$ = trim$(s$) if len(s$)>0 l$ = s$ v$ = "" c$ = "" i% = instr(s$,";") if i%>0 c$ = mid$(s$,i%+1,len(s$)) l$ = left$(s$,i%-1) end_if n_lignes% = n_lignes% + 1 if n_lignes%>n_max% n_max% = n_max% + 10 grid_row no_grid%,n_max% end_if i% = instr(l$,"=") if i%>0 v$ = mid$(l$,i%+1,len(l$)) l$ = left$(l$,i%-1) end_if grid_write no_grid%,n_lignes%,1,str$(n_lignes%-1) grid_write no_grid%,n_lignes%,2,trim$(l$) grid_write no_grid%,n_lignes%,3,trim$(v$) grid_write no_grid%,n_lignes%,4,trim$(c$) end_if end_while file_close 1 return click_grid: if l%>1 s$ = grid_read$(no_grid%,l%,c%) grid_write no_grid%,l%,c%,mid$(s$,5,len(s$)) end_if x% = mouse_x_left_down(no_grid%) y% = mouse_y_left_down(no_grid%) c% = GRID_X_TO_COLUMN(no_grid%,x%) l% = GRID_Y_TO_ROW(no_grid%,y%) if l%>n_lignes% gosub ajouter l% = n_lignes% end_if l$ = grid_read$(no_grid%,l%,1) v$ = grid_read$(no_grid%,l%,c%) grid_write no_grid%,l%,c%,"==> "+v$ active no_menu_1% active no_menu_1%+1 active no_menu_1%+2 active no_menu_1%+3 select c% case 2 gosub modif_libelle case 3 gosub modif_valeur case 4 gosub modif_comment end_select return
ajouter: n_lignes% = n_lignes% + 1 if n_lignes%>n_max% n_max% = n_max% + 10 grid_row no_grid%,n_max% end_if grid_write no_grid%,n_lignes%,1,str$(n_lignes%-1) grid_write no_grid%,n_lignes%,2,"<nouveau>" grid_write no_grid%,n_lignes%,3,"" grid_write no_grid%,n_lignes%,4,"" flag_modif% = 1 active no_menu% active no_menu%+1 active no_menu%+2 return modif_libelle: flag_libelle% = 2 caption no_modif%,"Modification" caption no_modif%+1,"Libellé:" s$ = grid_read$(no_grid%,l%,2) if left$(s$,4)="==> " text no_modif%+2,mid$(s$,5,len(s$)) else text no_modif%+2,s$ end_if inactive 0 show no_modif% return
modif_valeur: flag_libelle% = 3 caption no_modif%,"Modification" caption no_modif%+1,"Valeur:" s$ = grid_read$(no_grid%,l%,3) if left$(s$,4)="==> " text no_modif%+2,mid$(s$,5,len(s$)) else text no_modif%+2,s$ end_if inactive 0 show no_modif% return
modif_comment: flag_libelle% = 4 caption no_modif%,"Modification" caption no_modif%+1,"Commentaire:" s$ = grid_read$(no_grid%,l%,4) if left$(s$,4)="==> " text no_modif%+2,mid$(s$,5,len(s$)) else text no_modif%+2,s$ end_if inactive 0 show no_modif% return
supprimer: if l%=2 then return if l%<n_lignes% for i%=l% to n_lignes%-1 grid_write no_grid%,i%,2,grid_read$(no_grid%,i%+1,2) grid_write no_grid%,i%,3,grid_read$(no_grid%,i%+1,3) grid_write no_grid%,i%,4,grid_read$(no_grid%,i%+1,4) next i% end_if grid_write no_grid%,n_lignes%,1,"" grid_write no_grid%,n_lignes%,2,"" grid_write no_grid%,n_lignes%,3,"" grid_write no_grid%,n_lignes%,4,"" l% = 0 c% = 0 inactive no_menu_1% inactive no_menu_1%+1 inactive no_menu_1%+2 inactive no_menu_1%+3 flag_modif% = 1 return close_modif: s$ = grid_read$(no_grid%,l%,flag_libelle%) if left$(s$,4)="==> " grid_write no_grid%,l%,flag_libelle%,"==> "+text$(no_modif%+2) else grid_write no_grid%,l%,flag_libelle%,text$(no_modif%+2) end_if flag_modif% = 1 hide no_modif% active 0 to_foreground 0 return aide: inactive 0 s$ = "Chaque ligne représente un paramètre."+nl$ s$ = s$ + "Une ligne a le format général suivant:"+nl$ s$ = s$ + " NomDuParamètre=ValeurDuParamètre;Commentaire"+nl$+nl$ s$ = s$ + "Chaque partie est optionnelle. Ainsi"+nl$ s$ = s$ + " Version = V1.01 ; numéro de version"+nl$ s$ = s$ + "représente:"+nl$ s$ = s$ + " paramètre: version"+nl$ s$ = s$ + " valeur: V1.01"+nl$ s$ = s$ + " commentaire: numéro de version"+nl$ s$ = s$ + "ou alors"+nl$ s$ = s$ + " ; configuration de l'écran"+nl$ s$ = s$ + "représente une ligne de commentaire"+nl$ s$ = s$ + "et ainsi de suite."+nl$+nl$ s$ = s$ + "Chaque partie peut être modifiée séparément."+nl$+nl$ caption no_aide%+1,s$ show no_aide% return apropos: inactive 0 s$ = "IniEdit "+version$+" du "+creation$ + nl$ + nl$ s$ = s$ + "Auteur: Klaus" caption no_apropos%+1,s$ show no_apropos% return close_aide: hide no_aide% active 0 to_foreground 0 return
close_apropos: hide no_apropos% active 0 to_foreground 0 return
Dernière édition par Klaus le Mar 6 Mar 2012 - 11:04, édité 12 fois | |
|