IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Traitement de fichier.txt


Sujet :

Delphi

  1. #1
    Débutant  
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Points : 2 415
    Points
    2 415
    Par défaut Traitement de fichier.txt
    Bonjour, je voudrai créer un script un peut complexe pour un traitement de fichier.txt

    Voila le script va se déconposer en plusieur étape, voila ce que j'avais fait en batch:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    :: On créer la variable date au format 12\06\07:
    set datetimetmp=%date:~0,2%/%date:~3,2%/%date:~8,2%
     set datetimetmp=%datetimetmp: =%
     
    :: On récupére le numéro de la ligne ou se trouve la date du jour dans le fichier.txt:
    for /f "tokens=1 delims=:" %%i in ('type fichier.txt ^| findstr /i /n /c:"%datetimetmp%"') do set VrNubLigneDat=%%i
     
    :: On cherche les erreurs:
    for /f "skip=%VrNubLigneDat% tokens=1* delims= " %%i in ('type fichier.txt ^| findstr /i /c:"of which were"') do (
     if not %%i== 0 echo Il y a une erreur %%i
    )

    Donc voila ce que je veut faire:

    Etape 1: Je veut récupére la date sou cette forme 05\07\07 pas 05\07\2007

    Etape 2: Chercher le numéro de la ligne ou se trouve la date du jour, et placer le numéro de la ligne dans une variable

    Etape 3: Chercher toutes les ligne contenant la chaine de caractére "of which were ignored" en commancant le traitement a partir de la ligne ou se trouve la date du jour, et tester le premier caractére de chaqu'une des ligne contenant la chaine de caractére que je vien de cité, si le premier caractére et 0 ne rien faire, si le premier caractére n'est pas 0 afficher un message.


    Voici le fichier.txt:
    ---------------------------------- 11/06/07 ----------------------------------

    06:00:14 - DLL initialisation:-
    Flagword=0000011011101100
    Bit 0 clr = Raw data capture is disabled
    Bit 1 clr = Debug option is disabled
    01 c:\tsbload\bv.cdr
    input from filename 'c:\tsbload\bv.cdr'
    300 records received
    0 of which were ignored
    0 of which were faulty
    0 of which were busy

    ----------------------------------------------------------------------------------

    ---------------------------------- 12/06/07 ----------------------------------

    06:00:14 - DLL initialisation:-
    Flagword=0000011011101100
    Bit 0 clr = Raw data capture is disabled
    Bit 1 clr = Debug option is disabled
    01 c:\tsbload\bv.cdr
    input from filename 'c:\tsbload\bv.cdr'
    300 records received
    0 of which were ignored
    0 of which were faulty
    0 of which were busy

    ----------------------------------------------------------------------------------
    ---------------------------------- 13/06/07 ----------------------------------

    06:00:14 - DLL initialisation:-
    Flagword=0000011011101100
    Bit 0 clr = Raw data capture is disabled
    Bit 1 clr = Debug option is disabled
    01 c:\tsbload\bv.cdr
    input from filename 'c:\tsbload\bv.cdr'
    300 records received
    0 of which were ignored
    2 of which were faulty
    0 of which were busy

    ----------------------------------------------------------------------------------

    Sauriez vous m'aider ?

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 586
    Points : 25 262
    Points
    25 262
    Par défaut
    Ouch, ça c'est du Batch

    Consulte ce Sujet, lit le en entier, c'est long mais c'est un gros déballage pour la lecture de fichier, ça pourrait t'inspirer

    cherhce la fonction SearchStringInFile, ça pourrait servir pour
    "of which were ignored"

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Points : 576
    Points
    576
    Par défaut
    Bonjour,


    Je vous conseillerai d'utiliser un TStringList

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    var
     List: TStringList
    begin
      List := TStringList.Create;
      try
        List := TStringList.LoadFromfile ('NonDufichierACharger');
     
        // Fair le traitemement
     
      finally
        List.free;
      end;
    Dans list vous avez différentes fonction

    List.Count donne le nombre de ligne.
    List[I] renvoi la ligne N° I (attention de 0 à Count - 1 et non de 1 à count)
    List.Text renvoi toute les lignes. Le séparateur #13+#10 (code 13 + code 10 en ascii soit CR LF) sépare les lignes.

    Si j'ai bien compris, la 1° ligne (I = 0) contient la date sous la forme dd/mm/yy.
    Vous pouvez extraire les valeur par un copy sur la ligne et reco,stituer la date par encode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    var 
     dd, mm, yy: Word;
     sdd, smm, syy: String;
    Date: TDatetime;
    begin
     
     sdd := copy(List[0], 1, 2);
     smm := copy(List[0], 4, 2); 
     syy := copy(List[0], 7, 2); 
     
      try
        dd := IntTostr(sdd);
        mm := IntTostr(smm);
        yy := IntTostr(syy);
        Date := encodeDate(yy, mm, dd);
      except
        Erreure la 1° ligne n'est pas une date correcte
      end;
    Enfin vous pouvez utilise pos pour trouver les lignes rechercher
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    var
     I: Integer;
    begin
     
      for I := 1 To List.count - 1 do begin // de la ligne 2 à la derniere ligne (la ligne1 est la date)
        if Pos(Valeur_a_trouver, List[I]) > 0 then begin
          la valeur a trouver à été trouver memoriser I pour traitememnt ultérieure ou traiter la ligne içi
        end;
      end;
     
    end;

  4. #4
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Citation Envoyé par Tardiff Jean-François
    Je vous conseillerai d'utiliser un TStringList
    +1
    Dans le cadre de recherche dans un fichier type log ou les infos sont defini lignes a ligne et non bloc par bloc (ie document texte, code source, etc ..) dont la pertinance resulte de l'analyse des données pouvant etre sur stockeés sur plusieurs lignes, le TString list est l'ideal.

Discussions similaires

  1. traitement dans fichier txt
    Par oscar.cesar dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/05/2009, 22h54
  2. traitement de fichier TXT compliquer
    Par BuzzLeclaire dans le forum Langage
    Réponses: 3
    Dernier message: 02/04/2009, 11h13
  3. Batch : Traitement sur fichier txt
    Par vita83 dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 13/09/2008, 08h08
  4. PowerShell - Traitement de fichier.txt
    Par koKoTis dans le forum Windows
    Réponses: 3
    Dernier message: 23/07/2007, 18h25
  5. traitement de fichier TXT: mémoire insuffisante
    Par xherault dans le forum Delphi
    Réponses: 17
    Dernier message: 20/07/2006, 12h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo