Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1432 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Suivante
Auteur Sujet :

Demande d'aide : Manipulation de fichier texte en .csv

n°2100471
gilou
Modérateur
Modzilla
Posté le 08-09-2011 à 21:36:27  profilanswer
 

Reprise du message précédent :
On en a vu dire la même chose au sujet du Cobol ou de Windev... :whistle:  
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
mood
Publicité
Posté le 08-09-2011 à 21:36:27  profilanswer
 

n°2100530
mdc888
01010100 01101111 01110101 011
Posté le 09-09-2011 à 09:59:01  profilanswer
 

gilou a écrit :

On en a vu dire la même chose au sujet du Cobol ou de Windev... :whistle:  
A+,


J'irais pas jusque la  :pt1cable:   :lol:  
 
En passant, peux-tu m'aider pour mon problème de regex ?  
http://forum.hardware.fr/hfr/Progr [...] 4740_1.htm
 
Merci !

n°2100535
gilou
Modérateur
Modzilla
Posté le 09-09-2011 à 10:09:49  profilanswer
 

Ben a la base, ce que tu as, ça arrive en UTF8? Parce que si ça arrive dans un encodage national, le \p{Cyrillic} a peu de chances de fonctionner.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2100537
mdc888
01010100 01101111 01110101 011
Posté le 09-09-2011 à 10:18:26  profilanswer
 

oui ca arrive en utf-8

n°2100544
gilou
Modérateur
Modzilla
Posté le 09-09-2011 à 10:44:45  profilanswer
 

Ben si ce que tu veux rewriter est de la forme Медведев_Medvedev05.html la regexp ^([\p{Cyrillic}]+)_([0-9a-zA-Z-]+)\.html$ est correcte et le problème est ailleurs.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2100550
mdc888
01010100 01101111 01110101 011
Posté le 09-09-2011 à 11:05:34  profilanswer
 

c'est bien ce qu'il me semblait, et c'est pour cela que je demandais.
 
Merci pour ton aide ;)
Il va falloir que je cherche ailleurs...

n°2100562
gilou
Modérateur
Modzilla
Posté le 09-09-2011 à 12:36:06  profilanswer
 

Notes qu'elle est simplifiable: [\p{Cyrillic}]+ c'est la même chose que \p{Cyrillic}+ normalement.
Au fait, pour que ça marche, il faut aussi que la librairie PCRE qu'utilise PHP ait été compilée avec le support pour l'unicode, ce qui n'est pas toujours le cas.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2100569
mdc888
01010100 01101111 01110101 011
Posté le 09-09-2011 à 13:09:02  profilanswer
 

Merci pour le conseil et ton aide.
Ca fonctionne maintenant...
Je suis assez noob avec les regex : je n'arrive pas à autoriser les chiffres et le tirets (-) au sein des caractères cyrilliques

n°2100589
gilou
Modérateur
Modzilla
Posté le 09-09-2011 à 14:30:35  profilanswer
 

[-0-9\p{Cyrillic}]+ ça devrait le faire
sinon, tenter
([-0-9]|\p{Cyrillic})+
Pour le -, parfois certains trucs pas conformes marchent avec \- quand on est dans un [ ].
C'est à essayer aussi.
A+,

Message cité 1 fois
Message édité par gilou le 09-09-2011 à 14:33:11

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2100593
mdc888
01010100 01101111 01110101 011
Posté le 09-09-2011 à 14:53:24  profilanswer
 

gilou a écrit :

[-0-9\p{Cyrillic}]+ ça devrait le faire
sinon, tenter
([-0-9]|\p{Cyrillic})+
Pour le -, parfois certains trucs pas conformes marchent avec \- quand on est dans un [ ].
C'est à essayer aussi.
A+,


 
Oui c'est ce que j'avais tenté...
Mais ca ne fonctionne pas.
Je me demande si il n'y a pas un peoblème d'encodage sur le tiret par exemple...
Грид-компьютинг.html ne fonctionne pas

mood
Publicité
Posté le 09-09-2011 à 14:53:24  profilanswer
 

n°2100612
gilou
Modérateur
Modzilla
Posté le 09-09-2011 à 16:00:56  profilanswer
 

Chez moi, en Perl, ça marche:

Code :
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. # cyr.txt est un fichier utf8 contenant "Грид-компьютинг.html"
  5. open(my $fh, '<:encoding(utf8)', 'cyr.txt') or die "$!";
  6. open(my $fh1, '>:encoding(utf8)', 'resultc.txt') or die "$!";
  7. while (<$fh> ) {
  8.  if (/([\p{Cyrillic}-]+)/) {
  9.    printf $fh1 "$1\n";
  10.  }
  11. }
  12. close($fh);
  13. close($fh1);
  14. #en sortie, resultc.txt contient "Грид-компьютинг"


A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2100624
mdc888
01010100 01101111 01110101 011
Posté le 09-09-2011 à 16:40:22  profilanswer
 

gilou a écrit :

Chez moi, en Perl, ça marche:

Code :
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. # cyr.txt est un fichier utf8 contenant "Грид-компьютинг.html"
  5. open(my $fh, '<:encoding(utf8)', 'cyr.txt') or die "$!";
  6. open(my $fh1, '>:encoding(utf8)', 'resultc.txt') or die "$!";
  7. while (<$fh> ) {
  8.  if (/([\p{Cyrillic}-]+)/) {
  9.    printf $fh1 "$1\n";
  10.  }
  11. }
  12. close($fh);
  13. close($fh1);
  14. #en sortie, resultc.txt contient "Грид-компьютинг"


A+,


 
Bonne idée ca; je vais le tester en php ;) ;) ;)

n°2100939
mdc888
01010100 01101111 01110101 011
Posté le 12-09-2011 à 09:49:45  profilanswer
 

Exact, ca fonctionne nickel.
My bad, j'avais un problème d'encodage en amont (vu que c'est de l'url rewriting, j'avais tenté de faire du copié coller de lien dans le navigateur, ce qui ne fonctionne pas...)
 
Bref, merci beaucoup pour ton aide ;)

n°2100955
CPSeb
Posté le 12-09-2011 à 11:00:16  profilanswer
 

Salut  
Après analyse de mais 3000 lignes traité...  
il demeure des petits problèmes à corriger.
Voici le genre de ligne qui pose de petit soucis :
!K0842C!14 11 02  AV    AVOIR             *       AVOIR        ECHEANCE 31 12 02    *               !          85.42!  !
!K1738C!26 11 02  FA    FACTURE           *       FACTURE      ECHEANCE 31 12 02    *          81.09!               !  !
!L0500C!09 12 02  FA    FACTURE           *       FACTURE      ECHEANCE 09 12 02    *         276.40!               !  !
!L1698C!20 12 02  FA    FACTURE           *       FACTURE      ECHEANCE 20 12 02    *          18.63!               !  !
!A1184D!17 01 03  FA    FACTURE           *       FACTURE      ECHEANCE 17 01 03    *           8.62!               !  !
!A1496D!18 01 03  FA    FACTURE           *       FACTURE      ECHEANCE 18 01 03    *       1 886.70!               !  !
!A2308D!25 01 03  FA    FACTURE           *       FACTURE      ECHEANCE 25 01 03    *         680.55!               !  !
!A2650D!30 01 03  AV    AVOIR             *       AVOIR        ECHEANCE 00 00 00    *               !         760.93!  !
!A2651D!30 01 03  AV    AVOIR             *       AVOIR        ECHEANCE 00 00 00    *               !         104.11!  !
!A3019D!31 01 03  FA    FACTURE           *       FACTURE      ECHEANCE 31 01 03    *         129.10!               !  !
 
comme tu peux le constater  à la place d'un numéro de journal, ce genre de ligne reprend le mot facture ou avoir.
Ce qui fait que le script traite echeance et la date comme sont traité par exemple "opération diverse".  
Voici le résultat après traitement de mon fichier dans un tableau excel avec une ligne normal d'exemple au dessus.
 
 
1634 55681 27/10/2010 FA FACTURE  55681                                      10/12/2010                            1 281.27  
1636 842C 14/11/2002 AV AVOIR  AVOIR          ECHEANCE 31 12 02                                      85.42
1636 1738C 26/11/2002 FA FACTURE  FACTURE      ECHEANCE 31 12 02                              81.09  
1636 500C 09/12/2002 FA FACTURE  FACTURE      ECHEANCE 09 12 02                              276.4  
1636 1698C 20/12/2002 FA FACTURE  FACTURE      ECHEANCE 20 12 02                              18.63  
1636 1184D 17/01/2003 FA FACTURE  FACTURE      ECHEANCE 17 01 03                              8.62  
1636 1496D 18/01/2003 FA FACTURE  FACTURE      ECHEANCE 18 01 03                              1 886.70  
1636 2308D 25/01/2003 FA FACTURE  FACTURE      ECHEANCE 25 01 03                              680.55  
1636 2650D 30/01/2003 AV AVOIR  AVOIR          ECHEANCE 00 00 00                                       760.93
 
Je pense qu'il faut modifier le script au niveau de trim($5) mais après plusieur tentative je n'arrive à rien (le script est devenu plus compliqué qu'auparavant, déjà que je ramais..)
Et la ca ne se voit pas (le format d'un copier collé depuis mon excel n'est pas conservé ) mais en faite "facture et echeance avec la date" sont dans la meme case il faudrait donc pour ces lignes supprimer echeance et ajouter un , avant la date.
 
Je continue à essayer. Mais si t'es par là Gilou... ;)
 
 
 
 

n°2100957
CPSeb
Posté le 12-09-2011 à 11:05:40  profilanswer
 

y'a t'il moyen de dire des caractère quelconque (chiffre et lettre melangé) jusqu'au prochain blanc ?
est ce : s+(\s)\s+
pour par exmple prendre la valeur dans un fichier
    15frtg364       .
cela mettrait dans la variable 15frtg364  ??
 
ou est-ce \s+(^+)\s+ ?

Message cité 1 fois
Message édité par CPSeb le 12-09-2011 à 11:15:48
n°2100965
CPSeb
Posté le 12-09-2011 à 11:32:29  profilanswer
 

Bon en tout cas j'ai réussi ( mais c'était pas dur ) à conserver mais numéro d'ecriture tel qu'elle j'ai juste supprimé l'appele de formatnum
Car j'ai des numéro d'ecriture du style $54222 ou K1522L donc la de ce coté ci c'est bon.

n°2100968
gilou
Modérateur
Modzilla
Posté le 12-09-2011 à 11:39:58  profilanswer
 

CPSeb a écrit :

Salut  
Après analyse de mais 3000 lignes traité...  
il demeure des petits problèmes à corriger.
Voici le genre de ligne qui pose de petit soucis :
!K0842C!14 11 02  AV    AVOIR             *       AVOIR        ECHEANCE 31 12 02    *               !          85.42!  !
!K1738C!26 11 02  FA    FACTURE           *       FACTURE      ECHEANCE 31 12 02    *          81.09!               !  !
!L0500C!09 12 02  FA    FACTURE           *       FACTURE      ECHEANCE 09 12 02    *         276.40!               !  !
!L1698C!20 12 02  FA    FACTURE           *       FACTURE      ECHEANCE 20 12 02    *          18.63!               !  !
!A1184D!17 01 03  FA    FACTURE           *       FACTURE      ECHEANCE 17 01 03    *           8.62!               !  !
!A1496D!18 01 03  FA    FACTURE           *       FACTURE      ECHEANCE 18 01 03    *       1 886.70!               !  !
!A2308D!25 01 03  FA    FACTURE           *       FACTURE      ECHEANCE 25 01 03    *         680.55!               !  !
!A2650D!30 01 03  AV    AVOIR             *       AVOIR        ECHEANCE 00 00 00    *               !         760.93!  !
!A2651D!30 01 03  AV    AVOIR             *       AVOIR        ECHEANCE 00 00 00    *               !         104.11!  !
!A3019D!31 01 03  FA    FACTURE           *       FACTURE      ECHEANCE 31 01 03    *         129.10!               !  !
 
comme tu peux le constater  à la place d'un numéro de journal, ce genre de ligne reprend le mot facture ou avoir.
Ce qui fait que le script traite echeance et la date comme sont traité par exemple "opération diverse".  
Voici le résultat après traitement de mon fichier dans un tableau excel avec une ligne normal d'exemple au dessus.
 
 
1634 55681 27/10/2010 FA FACTURE  55681                                      10/12/2010                            1 281.27  
1636 842C 14/11/2002 AV AVOIR  AVOIR          ECHEANCE 31 12 02                                      85.42
1636 1738C 26/11/2002 FA FACTURE  FACTURE      ECHEANCE 31 12 02                              81.09  
1636 500C 09/12/2002 FA FACTURE  FACTURE      ECHEANCE 09 12 02                              276.4  
1636 1698C 20/12/2002 FA FACTURE  FACTURE      ECHEANCE 20 12 02                              18.63  
1636 1184D 17/01/2003 FA FACTURE  FACTURE      ECHEANCE 17 01 03                              8.62  
1636 1496D 18/01/2003 FA FACTURE  FACTURE      ECHEANCE 18 01 03                              1 886.70  
1636 2308D 25/01/2003 FA FACTURE  FACTURE      ECHEANCE 25 01 03                              680.55  
1636 2650D 30/01/2003 AV AVOIR  AVOIR          ECHEANCE 00 00 00                                       760.93
 
Je pense qu'il faut modifier le script au niveau de trim($5) mais après plusieur tentative je n'arrive à rien (le script est devenu plus compliqué qu'auparavant, déjà que je ramais..)
Et la ca ne se voit pas (le format d'un copier collé depuis mon excel n'est pas conservé ) mais en faite "facture et echeance avec la date" sont dans la meme case il faudrait donc pour ces lignes supprimer echeance et ajouter un , avant la date.
 
Je continue à essayer. Mais si t'es par là Gilou... ;)
 
 
 
 


C'est pourtant facile la:
Tu as:

Code :
  1. $_ = trim($5); # c'est sur la valeur de $5 qu'on va maintenant chercher des patterns
  2.    if (/^(\d+)\s+ECHEANCE\s+(\d+\s+\d+\s+\d+)/) { # on repere une echance
  3.      $parsedline->{'facture'} = formatnum($1);
  4.      $parsedline->{'echance'} = formatdate($2);
  5.    }
  6. ......


qui traite un champ avec un nombre suivi de ECHEANCE et une date
Il suffit de rajouter un traitement pour un mot suivi de ECHEANCE et une date

Code :
  1. $_ = trim($5); # c'est sur la valeur de $5 qu'on va maintenant chercher des patterns
  2.    if (/^(\d+)\s+ECHEANCE\s+(\d+\s+\d+\s+\d+)/) { # on repere une echeance avec un nombre avant
  3.      $parsedline->{'facture'} = formatnum($1);
  4.      $parsedline->{'echance'} = formatdate($2);
  5.    }
  6.    elsif (/^(\S+)\s+ECHEANCE\s+(\d+\s+\d+\s+\d+)/) { # on repere une echeance avec un mot avant
  7.      $parsedline->{'facture'} = $1; # Si c'est la qu'on range les choses comme AVOIR ou FACTURE
  8.      $parsedline->{'echance'} = formatdate($2);
  9.    }
  10. ......


L'ordre de traitement (test si nombre en tête suivi de ECHEANCE, puis test si mot en tête suivi de ECHEANCE) est important ici, car les nombres sont des mots particuliers.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2100970
gilou
Modérateur
Modzilla
Posté le 12-09-2011 à 11:47:01  profilanswer
 

CPSeb a écrit :

y'a t'il moyen de dire des caractère quelconque (chiffre et lettre melangé) jusqu'au prochain blanc ?
est ce : s+(\s)\s+
pour par exmple prendre la valeur dans un fichier
    15frtg364       .
cela mettrait dans la variable 15frtg364  ??
 
ou est-ce \s+(^+)\s+ ?

\S+ c'est des caractères quelconques jusqu'au prochain blanc.
Si tu veux juste des chiffres et des lettres tu peux faire aussi \w (un mot est compose de lettres, chiffres ou _ et je pense que inclure ce dernier caractère doit pas gêner au vu de tes données).
A+,
 


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2101189
CPSeb
Posté le 13-09-2011 à 10:33:23  profilanswer
 

Ca y'est j'ai corrigé le problème qui persistait, j'ai ajouté ces lignes dans trim($5) plus celle que tu m'avais donné ( car il restait un problème : 3 lignes étaient mal traité )  
Excuse moi je sais que pour toi c'est facile et clair de lire ce code mais pour moi ( ne connaissant rien à la syntaxe du Perl c'était un peu dur mais je m'y suis retrouvé petit à petit )
 

Code :
  1. elsif (/^(\d+)\s+(\S+)\s+ECHEANCE\s+(\d+\s+\d+\s+\d+)/) {
  2.   $parsedline->{'jal'} = formatnum($1);
  3.   $parsedline->{'facture'} = $2;
  4.       $parsedline->{'echance'} = formatdate($3);


 
Grâce à toi :  
- Cet horrible fichier de compta va pouvoir retrouver en lisibilité et nous allons gagner un temps précieux
- J'ai compris quelque rudiment du Perl et j'ai vu comment on pouvait "Parser" un fichier.
 
Je te remercie grandement gilou pour le temps que tu as passés (..perdu) à m'expliquer et faire ce script.
 
Si je peux te rendre la pareille un jour..(si t'as des questions plus orientées réseaux.. :)  )
 
Merci et A+
 


Message édité par CPSeb le 13-09-2011 à 10:36:48
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
Texte incopiable[demande] envoi automatique de produit numerique
demande de script pr reconnec sagem LB2/Jdownloader[VB] Modifier un fichier XML
Besoin d'aide pour un SELECT multitablesrépliquer un texte à plusieurs endroits ( sans signets si possible ! )
Compilation fortran sous cygwin : .exe demande UACVBA - Gestion de la fenêtre windows "Téléchargement de fichier"
un fichier PDF qui s'ouvrirait dans une nouvelle fenêtre (pop up)C++ Fermer l'execution d'un fichier.
Plus de sujets relatifs à : Demande d'aide : Manipulation de fichier texte en .csv


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR