Forum Programmation.autre Question: Quel langage?

Posté par  .
Étiquettes : aucune
0
23
mai
2005
Bonjour les gens,

Voila, je voudrais demander l'avis à des gens sûrement plus expérimentés que moi, et en plus, ça permettra d'avoir plusieurs avis sur la question.

Sans entrer dans trop de détail à la sauce mavieprivée.com, je suis en train de choisir un langage de programmation pour une application particulière.

Le but de cette application est principalement le traitement de chaîne de caractères sur un nombre indéfini de lignes de texte. En gros, je dispose d'un nombre assez important d'adresses postales, et l'application serait utilisée pour faire des corrections et tout un tas de traitement.
De plus, il y aurait probablement besoin de comparer plusieurs lignes entre elles.

Selon vous, quel serait les meilleurs langage (ou combinaison de langage) pour traiter un grand nombre de lignes, de manière assez rapide, dont les traitements sont principalement des visualisation/modification/comparaisons de chaîne de caractères?

Merci beaucoup.

P.S: Je n'est peut être pas été très clair. Rattrapez moi sur les points sombres.
  • # Base de donnée ?

    Posté par  . Évalué à 1.

    Personnellement, pour du traitement de données, surtout si tu dis "un grand nombre de lignes", le mieux est déjà de mettre les données dans une base de donnée ! Il n'y a rien de plus performant qu'une base de données pour afficher/sélectionner/modifier/comparer des données ...

    Ensuite, pour accéder à la base, utilise ce que tu connais de mieux ! Java, ou php par exemple, à voir. Cela dépend de ce que tu veux faire : une application partagée ou standalone ?

    ;-]
    • [^] # Re: Base de donnée ?

      Posté par  . Évalué à 2.

      Non mais franchement, un peu de bon sens ça serait pas mal aussi !!! Une base de données est faite pour faire des requêtes sur des données. Là il veut juste prendre des données et les modifier.

      Alors oui, avec une base de données on sait le faire mais c'est vraiment pas ce qu'il y a de plus souple et d'efficient. Mon prof de math en prépa disait que pour percer un trou dans un mur, on prend pas un marteau piqueur !

      Pour modifier des données au format texte, il existe quelques outils bien adaptés. bash/sed/awk te permettront de faire des modifications sommaires sur tes fichiers. A priori tu dois aussi pouvoir rappeler des données précédemment lues, donc le scripting shell me semble un peu léger (j'ai pas dis que ct impossible).

      Du coup tu peux t'orienter vers Perl qui a été écrit spécifiquement pour traiter des fichiers textes. Je ne connais pas très bien ce langage mais tout ce que j'en ai entendu dire et que c'était fait pour ça (j'ai malheureusment jamais eu le temps de m'y plonger et awk m'a tjrs suffit).

      Alors oui tu peux t'amuser à faire un loader Oracle et puis faire une procédure en PL/SQL pour retraiter chaque ligne, mais c'est vraiment sortir l'artillerie lourde pour faire qqc de simple.
    • [^] # Re: Base de donnée ?

      Posté par  . Évalué à 0.

      du grand n'importe quoi ...
  • # en java bien sûr !

    Posté par  (site web personnel) . Évalué à 1.

    moi personnelement je ferai ca en java, car en java on manipule les expressions régulières facilement, on peut faire des interfaces graphiques facilement, et aussi (surtout) parceque j'aime bien java :)

    Maintenant certains seront tenté de te diriger vers des méthodes à base de scripts shell (sed/awk/perl/etc.) Comme j'suis pas un grand spécialiste de ces trucs, j'laisse le soin à un autre d'en parler.
    • [^] # Re: en java bien sûr !

      Posté par  . Évalué à 1.

      Tu peux s'il te plait me donner un bout de code Java pour remplacer toutes les chaines TOTO par la chaine TATA dans un fichier foo.bar ?
      • [^] # Re: en java bien sûr !

        Posté par  (site web personnel) . Évalué à 2.

        Bon et bien si t'insistes...

        import java.io.*;

        public class Foo
        {

        public static void main(String args[])
        {
        int p = 0;
        int nb = 0;
        int indx = 1;
        int repl = 0;
        String rech;
        String remp;
        try { nb = Integer.parseInt(args[0]); }
        catch (Throwable t) { //bouh }

        for (int i = nb * 2 + 1; i < args.length; i++)
        {
        try
        {
        RandomAccessFile raf = new RandomAccessFile(args[i], "r");
        byte b[] = new byte[new Long(raf.length()).intValue()];
        raf.read(b);
        raf.close();
        File fichier = new File(args[i]);
        String s = new String(b);
        for (int j = 2; j < nb * 2 + 1; j += 2)
        {
        p = 0;
        repl = 0;
        rech = args[j - 1];
        remp = args[j];
        while (p != -1)
        {
        p = s.indexOf(rech, p);
        if (p != -1)
        {
        s = s.substring(0, p) + remp + s.substring(p + rech.length());
        repl++;
        }
        }
        }
        try
        {
        fichier.delete();
        RandomAccessFile rf = new RandomAccessFile(args[i], "rw");
        rf.write(s.getBytes());
        rf.close();
        }
        catch (IOException e)
        {
        System.exit(0);
        }
        }
        catch (IOException e)
        {
        System.exit(0);
        }
        }
        }
        }


        la syntaxe c'est
        foo [nombres de mot a chercher] [mot 1] [remplacement_mot 1] ... [mot n] [remplacement_mot n] [fichier 1] ... [fichier n]

        Ya pas de gestion d'erreur.
        • [^] # Re: en java bien sûr !

          Posté par  (site web personnel) . Évalué à 3.

          Mon dieu quelle horreur. Tu connais la classe regex ?
          Bon sinon un élément de réponse pour le monsieur qui pose la question :
          http://www.regular-expressions.info/(...)

          " In just one line of code, whether that code is written in Perl, PHP, Java, a .NET language or a multitude of other languages."
          • [^] # Re: en java bien sûr !

            Posté par  (site web personnel) . Évalué à 2.

            hum, je m'autocite :
            moi personnelement je ferai ca en java, car en java on manipule les expressions régulières facilement

            Donc oui je connais l'api regex de java. Mais bon je donnais un bout de code pris au hasard sur google donnant le résultat escompté quelque soit la jvm (même si <1.4)

            Désolé de t'avoir choqué hein :)
        • [^] # Re: en java bien sûr !

          Posté par  (site web personnel) . Évalué à 2.

          y'a pas à dire, perl c'est bien ;-)
          #!/usr/bin/perl
          
          use Getopt::Std;
          
          getopt("io");
          
          open(IN, "<$opt_i") or die("open : $!");
          open(OUT, ">$opt_o") or die("open : $!");
          
          while(defined($line = <IN>)) {
              $line =~ s/TOTO/TATA/g;
              print OUT $line;
          }
          
          close(IN);
          close(OUT);
          
          A appeler du genre ./replace -i toto -o tata
  • # perl...

    Posté par  (site web personnel) . Évalué à 6.

    bah moi je ferais ça en perl.

    Si tes données sont sous format txt, tu ne trouvera pas mieux que Perl, vu qu'il a été écris pour faire ce genre de boulot. De plus, le code a écrire est très compact pour ce genre de truc.

    "La première sécurité est la liberté"

  • # perl c'est bien

    Posté par  . Évalué à 4.

    salut,

    Je ne veux pas te faire perdre la tête mais je conseillerais Perl dans ce genre de cas.

    Perl a été créé pour manipuler les fichiers et les chaînes de caractères. Il me semble que c'est exactement ce que tu as l'intention de faire.

    Je te renvoye ici
    http://www.med.univ-rennes1.fr/~poulique/cours/perl/(...) ( le background est laid mais tu peux le virer avec la dev bar de firefox )
    et ici
    http://perl.enstimac.fr/(...) ( complet mais compliqué par moments)

    have fun !
  • # Oui

    Posté par  . Évalué à 1.

    Merci beaucoup pour vos réponses.

    Tout ca me parait des bonnes idées mais au final ce n'est pas moi qui choisirai donc...

    Je posais aussi la question pour savoir s'il existait d'autres langages obscures que personne connait mais qui sont en fait vachement bien pour faire ca :p Comme c'est assez spécifique.

    Je me demandai aussi autre chose, est-ce que ce serait plus rapide ou non, d'implementer je ne sais pas comment la meme chose à l'aide du XML?

    D'apres ce que j'ai pu glanner le XML me permettra juste le traitement de données en soit et pas énormement de chaines de caractères précises non?

    Enfin, certaines instances supérieurs risques de me refuser le perl parce que c'est un langage interprété. Quels sont les possibilités d'inclusion de script perl dans du C++ par exemple?

    Je ne connait encore pas tout les détails de l'opération mais cela devrait etre compilable assez facilement sous tout un tas d'OS... dont du gros systeme...

    En tout cas merci encore pour vos reponses.
    • [^] # Re: Oui

      Posté par  (site web personnel) . Évalué à 2.

      XML c'est un langage générique de structuration de données à base de balise. Basiquement ca ne fait strictement rien, c'est pas fait pour programmer mais pour structurer des données. Après il y a des dérivés d'XML qui permettent de transformer un document XML en autre chose (genre XSLT), mais bon dans ton cas autant te dire que ca sert à rien.

      Si tu ne peux pas utiliser de langage interprété, tourne toi vers ton langage favori compilé et cherche comment lire et écrire dans un fichier, tout en trouvant la classe sur les expressions régulières (regex). Tu n'auras quasiment aucune différence d'un langage un autre, l'algo étant relativement simple.
      http://www.regular-expressions.info/(...)
      • [^] # Re: Oui

        Posté par  . Évalué à 1.

        Je m'interrogeais sur la rapidités de toutes ses methodes.

        Par exemple, avec des bibliotheques styles DOM ou SAX peut on acceder rapidement a des données?

        Mais peut etre que le temps de traitement dun perl fera oublier le temps dacces par XML.

        Et quid des bibliotheques regex? Sont elles limités par le langage de compilation ou sont elles aussi rapide que le langage utilisé pour les construire (exemple perl)

        En tout cas je crois avoir assez d'info pour reflechir serieusement avec de vrais arguments.

        Merci beaucoup. Bonne soirée a tous.
        • [^] # Re: Oui

          Posté par  (site web personnel) . Évalué à 2.

          DOM ou SAX c'est pour parser un fichier XML uniquement.
          Perl c'est pour parser tout court. Si faut parser du XML il est évidemment bien plus pratique d'utiliser DOM ou SAX.
          Pour ce qui est de regex, rien ne vaudra jamais un langage compilé avec une lib regex bien foutue, cad qui sache compiler une regex. Une regex compilé ira beaucoup plus vite qu'un script perl. Après c'est surtout une question de confort de programmation : les fanas de Perl te montreront un script qui tient en 1 ligne et qui fait la même chose que ton programme compilé qui en fait 60.

          Après tout dépend de ce que tu veux faire, si c'est juste un script, Perl peut être un bon choix, si par contre c'est proposer une API ou proposer une interface graphique, Perl a tout de suite beaucoup moins d'intérêt ;)
    • [^] # Re: Oui

      Posté par  (site web personnel) . Évalué à 2.

      Concernant l'intégration de perl en c ou c++ (à mon avis, perl est génial pour le traitement de textes) (honteusement repompé de "programmation en perl chez o'reilly)
      PerlInterpreteur *my_perl;
      int main(int argc, char **argv, char **env) {
        int exitstatus;
      
        my_perl = perl_alloc();
        perl_construct(my_perl);
      
        exitstatus = perl_parse(my_perl, xs_init, argc, argv, (char **) NULL);
      
        if(exitstatus) {
          exit(exitstatus);
        }
      
        perl_destruct(my_perl);
        perl_free(my_perl);
      
        exit(exitstatus);
      }
      
  • # plop

    Posté par  . Évalué à 1.

    Pour le fun et si tu ne connais pas, je le ferais en perl car c'est un langage
    expressement fait pour ce type de travail.

    Sinon je le ferais en java.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.