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

Flash Pascal Discussion :

Anniversaires


Sujet :

Flash Pascal

  1. #21
    Expert éminent sénior
    Citation Envoyé par Roland Chastain Voir le message
    D'accord, mais où faut-il la prendre exactement, la date ?

    Code X :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    BEGIN:VEVENT
    CLASSUBLIC
    CREATED:20160519T124312Z
    DTEND;TZID="Romance Standard Time":20160519T100000
    DTSTAMP:20160519T124300Z
    DTSTART;TZID="Romance Standard Time":20160519T090000
    LAST-MODIFIED:20160519T124312Z
    SEQUENCE:0
    SUMMARY: roland juju
    TRANSP:OPAQUE
    UID:dc63d245-71d3-437a-bff2-33eb081f2a4d
    X-MICROSOFT-CDO-BUSYSTATUS:BUSY
    END:VEVENT
    c'est du format iCal

    CREATED donne la date de création de l'événement qui a "LAST_MODIFIED"
    DSTART/DEND c'est le début/fin, ici le 19/05/2016 et 09h00 à 10h00
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  2. #22
    Rédacteur/Modérateur

    Merci Paul.

    Voici un premier essai de lecture du fichier .ics.

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    { Free Pascal }
     
    program ReadICS_01;
     
    {$APPTYPE CONSOLE}
    {$IFDEF FPC}{$MODE DELPHI}{$ENDIF}
     
    uses
      SysUtils, Classes, RegExpr;
     
    const
      PATTERN =
        'DTSTART;TZID="[ \w]+"<img src="images/smilies/icon_sad.gif" border="0" alt="" title=":(" class="inlineimg" />\d{8})\w+\s+' +
        'LAST-MODIFIED:\w+\s+' +
        'SEQUENCE:\w+\s+' +
        'SUMMARY<img src="images/smilies/icon_sad.gif" border="0" alt="" title=":(" class="inlineimg" />[ \w]+)';
     
    var
      list: TStringList;
      expr: TRegExpr;
     
    begin
      list := TStringList.Create;
      list.LoadFromFile('cal.ics');
     
      expr := TRegExpr.Create;
      expr.Expression := PATTERN;
     
      if expr.Exec(list.Text) then
        repeat
          //WriteLn(expr.Match[0]);
          WriteLn(expr.Match[1]);
          WriteLn(expr.Match[2]);
        until not expr.ExecNext;
     
      expr.Free;
     
      list.Free;
    end.


    À tester sur le vrai fichier.

    Voici ce que ça donne avec le fichier de test :

    Code X :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    20160519
     roland juju
    20160601
    Laurent Bebe
    20160528
    Bernard Tutu
    20160603
    Gerard Lili


    Si ce premier essai fonctionne, on peut améliorer le programme afin qu'il fabrique l'unité en Pascal, ce qui éviterait d'avoir à remplir l'unité à la main.

  3. #23
    Rédacteur/Modérateur

    Voici le programme qui fabrique l'unité en Pascal.

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
     
    { Free Pascal }
     
    program ReadICS_02;
     
    {$APPTYPE CONSOLE}
    {$IFDEF FPC}{$MODE DELPHI}{$ENDIF}
     
    uses
      SysUtils, Classes, RegExpr;
     
    const
      PATTERN =
        'DTSTART;TZID="[ \w]+":\d{4}(\d{2})(\d{2})\w+\s+' +
        'LAST-MODIFIED:\w+\s+' +
        'SEQUENCE:\w+\s+' +
        'SUMMARY<img src="images/smilies/icon_sad.gif" border="0" alt="" title=":(" class="inlineimg" />[ \w]+)';
     
    var
      list: TStringList;
      expr: TRegExpr;
      month, day: integer;
      data: array[1..12, 1..31] of string;
      fichier: TextFile;
     
    begin
      list := TStringList.Create;
      list.LoadFromFile('cal.ics');
     
      expr := TRegExpr.Create;
      expr.Expression := PATTERN;
     
      if expr.Exec(list.Text) then
        repeat
          month := StrToInt(expr.Match[1]);
          day := StrToInt(expr.Match[2]);
          data[month, day] := expr.Match[3];
        until not expr.ExecNext;
     
      expr.Free;
     
      list.Free;
     
      AssignFile(fichier, 'Unit1.pas');
      Rewrite(fichier);
     
      WriteLn(fichier);
      WriteLn(fichier, 'unit Unit1;');
      WriteLn(fichier);
      WriteLn(fichier, 'interface');
      WriteLn(fichier);
      WriteLn(fichier, 'const');
      WriteLn(fichier, '  DATA: array[1..12, 1..31] of string = (');
     
      for month := 1 to 12 do
      begin
        WriteLn(fichier, '    (');
        for day := 1 to 31 do
        begin
          Write(fichier, Format('      {%0.2d/%0.2d} "%s"', [day, month, data[month, day]]));
          if day < 31 then
            Write(fichier, ',');
          WriteLn(fichier);
        end;
        Write(fichier, '    )');
        if month < 12 then
          WriteLn(fichier, ',')
        else
          WriteLn(fichier);
      end;
     
      WriteLn(fichier, '  );');
      WriteLn(fichier);
      WriteLn(fichier, 'implementation');
      WriteLn(fichier);
      WriteLn(fichier, 'end.');
     
      CloseFile(fichier);
    end.

  4. #24
    Futur Membre du Club
    Votre code pour lire le fichier .ics doit etre monter avec delphi en fichier .DPROJ pour servir d'extracteur ???

    J'ai essayer de pencher sur delphi7 qui a l'air plus complexe que flashpascal.

  5. #25
    Rédacteur/Modérateur

    Le code que j'ai posté plus haut doit être compilé avec Free Pascal. Vous pouvez aussi le compiler avec Delphi 7, mais alors il faut vous procurer l'unité RegExpr.

  6. #26
    Futur Membre du Club
    ok je peux avoir 2 ou 3 astuces pour compiler sous free pascal ou peut être lien pour comprendre le fonctionnement de celui ci.

  7. #27
    Rédacteur/Modérateur

    Ce que je peux vous proposer, c'est un programme déjà compilé. Il faut l'exécuter au moyen de la commande suivante :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    ReadICS_03.exe "votre fichier.ics"


    Ou faire glisser le fichier .ics, avec la souris, sur le fichier .exe.

  8. #28
    Futur Membre du Club
    Merci Roland et en terme de format d écriture si je veux faire un retour à la ligne dans votre fichier .pas qu'elle est l écriture a adopter ???

  9. #29
    Rédacteur/Modérateur

    Citation Envoyé par nono42000 Voir le message
    si je veux faire un retour à la ligne
    Je ne suis pas sûr de bien comprendre la question. Je suppose que vous parlez du programme Flash Pascal. Pour avoir un retour à la ligne il faut utiliser le caractère #10 ou le caractère #13.

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
     
      t.text := 'Anniversaire' + #10 + DATA[month, day];