#include #pragma hdrstop #include "FF.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TTraitement *Traitement; const AnsiString Borne="HREF"; //--------------------------------------------------------------------------- __fastcall TTraitement::TTraitement(TComponent* Owner) : TForm(Owner) { Extension->Text="mid"; Chemin->Text="MIDI/"; Texte=new TStringList; } //--------------------------------------------------------------------------- void __fastcall TTraitement::RechercheClick(TObject *Sender) { Progression->Position=0; if(OuvreFichier->Execute()) TraiteFic(OuvreFichier->FileName); } //--------------------------------------------------------------------------- void TTraitement::TraiteFic(AnsiString N) { if(Confirme(N)) TraiteFic1(N); } //--------------------------------------------------------------------------- void TTraitement::TraiteFic1(AnsiString N) { int i=0,j=1; Update(); liml=0; limc=1; NbModif=0; EXT="."+UpperCase(Extension->Text); Texte->LoadFromFile(N); do TraitePos(i,j); while(CarSuiv(i,j)); Application->MessageBox(CompteRendu(NbModif).c_str(),"Traitement", MB_OK); Texte->SaveToFile(OuvreFichier->FileName); } //--------------------------------------------------------------------------- AnsiString __fastcall TTraitement::CompteRendu(int N) { AnsiString M1="Traitement terminé! "; AnsiString M2="Aucune intervention ŕ signaler"; AnsiString M3="Il y a eu "; AnsiString M4="une"; AnsiString M5=" intervention"; AnsiString M6=IntToStr(N); AnsiString M7="s"; if(N==0) return(M1+M2); if(N==1) return(M1+M3+M4+M5); return(M1+M3+M6+M5+M7); } //--------------------------------------------------------------------------- bool TTraitement::Confirme(AnsiString N) { N="Nous allons traiter le fichier "+N; return (Application->MessageBox(N.c_str(), "Traitement", MB_OKCANCEL)==IDOK); } //--------------------------------------------------------------------------- void __fastcall TTraitement::TraitePos(int& l,int& c) { MODIF=false; if(Trouve(l,c,EXT)) TraiteOcc(l,c); if(MODIF) { l=liml; c=limc; } } //--------------------------------------------------------------------------- bool TTraitement::Trouve(int l,int c,AnsiString Ext) { int i=1; bool ok,rep; AnsiString Car; do { Car=UpperCase(Texte->Strings[l][c]); rep=(Car==Ext[i]); if(rep) { if(i++==Ext.Length()) ok=false; else ok=CarSuiv(l,c); } else ok=false; } while(ok); if(rep) rep=TrouveSigne(l,c,'"',false); if(rep) { finl=l; finc=c; } return rep; } //--------------------------------------------------------------------------- bool __fastcall TTraitement::CarSuiv(int& l,int& c) { bool existe,vide; if(c++Strings[l].Length()) return true; c=1; do { existe=(++l!=Texte->Count); if(existe) vide=!Texte->Strings[l].Length(); } while(existe && vide); return existe; } //--------------------------------------------------------------------------- bool __fastcall TTraitement::CarPrec(int& l,int& c) { bool existe; if(--c) return true; do { existe=(--l>=0); if (existe) c=Texte->Strings[l].Length(); } while(existe && !c); return existe; } //--------------------------------------------------------------------------- void __fastcall TTraitement::TraiteOcc(int l,int c) { bool ok; do { ok=CarPrec(l,c) && Ordre(liml,limc,l,c); if(ok) { if (TrouveBorne(l,c)) { TraiteBorne(l,c); ok=false; } } } while (ok); } //--------------------------------------------------------------------------- bool __fastcall TTraitement::Ordre(int l1,int c1, int l2, int c2) { if(l1==l2) return (c1Strings[l][c]); rep=(Car==Borne[i]); if(rep) { if(!--i) ok=false; else ok=CarPrec(l,c); } else ok=false; } while(ok); return rep; } //--------------------------------------------------------------------------- void __fastcall TTraitement::TraiteBorne(int l,int c) { if(TrouveSigne(l,c,'=', true)) if(TrouveSigne(l,c,'"',true)) if(Ordre(l,c,finl,finc)) RepareOcc(l,c,finl,finc); } //--------------------------------------------------------------------------- bool TTraitement::TrouveSigne(int& l, int& c, AnsiString Signe, bool AvecLimite) { AnsiString Car; while(true) { if(!CarSuiv(l,c)) return false; if(AvecLimite && !Ordre(l,c,finl,finc)) return false; Car=Texte->Strings[l][c]; if(Car==Signe) return true; if(Car!=' ') return false; } } //--------------------------------------------------------------------------- void TTraitement::RepareOcc(int l1,int c1, int l2, int c2) { AnsiString A, Lien=Chemin->Text+NomPur(l1,c1); CarSuiv(l1,c1); CarPrec(l2,c2); if(l1==l2) SupCas1(l1,c1,c2); else if(l2==l1+1) SupCas2(l1,c1,c2); else SupCas3(l1,c1,l2,c2); A=Texte->Strings[l1]; A.Insert(Lien,c1); Texte->Strings[l1]=A; MODIF=true; liml=l1; limc=c1+Lien.Length()-1; NbModif++; Progression->Max=Texte->Count-1; Progression->Position=l1; } //--------------------------------------------------------------------------- void __fastcall TTraitement::SupCas1(int l,int c1, int c2) { AnsiString A=Texte->Strings[l]; A.Delete(c1,c2-c1+1); Texte->Strings[l]=A; } //--------------------------------------------------------------------------- void __fastcall TTraitement::SupCas2(int l,int c1, int c2) { AnsiString A=Texte->Strings[l]; A.Delete(c1,A.Length()-c1+1); Texte->Strings[l]=A; A=Texte->Strings[l+1]; A.Delete(1,c2); Texte->Strings[l+1]=A; } //--------------------------------------------------------------------------- void TTraitement::SupCas3(int l1,int c1, int l2,int c2) { for(int i=0;iDelete(l1+1); SupCas2(l1,c1,c2); } //--------------------------------------------------------------------------- AnsiString __fastcall TTraitement::NomPur(int l,int c) { bool ok=true; AnsiString Nom="", Car; do { CarSuiv(l,c); Car=Texte->Strings[l][c]; if(Car=='/') Nom=""; else { if (Car!='"') Nom=Nom+Car; else ok=false; } } while(ok); return Nom; } //--------------------------------------------------------------------------- void __fastcall TTraitement::FormDestroy(TObject *Sender) { delete Texte; } //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- //---------------------------------------------------------------------------