1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    novembre 2009
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : novembre 2009
    Messages : 180
    Points : 85
    Points
    85

    Par défaut Convertir script ruby en Go

    Bonjour à tous,

    Suite à mes difficultés avec le split de gros fichiers XML, j'ai fini par trouver et adapter un script Ruby

    Code RUBY : 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
    require 'xml'
     
    XML_FILE = './exported_0.xml'
     
    # A special file class that we'll write its output in
    # successive files with the same number of items in it
    # (except for the last one which size may vary)
    class SplitFile
      def initialize(template_name, items_per_file)
        @template_name = template_name
        @items_per_file = items_per_file
        @item_count = 0
        @file_index = 0
        @fh = open()
      end
     
      def write(content)
        @fh.write(content)
        @fh.write("\n")
        @item_count += 1
        if @item_count == @items_per_file
          self.close()
          self.open()
        end
      end
     
      def open
        exit if @file_index == 3
        @file_index += 1
        @fh = File.open(self.batch_name(), 'w')
      end
     
      def close
        @fh.close
        @item_count = 0
      end
     
      def batch_name
        @template_name % @file_index
      end
    end
     
    # XML Processor to split the Product records into
    # smaller XML chunks
    class XMLSplitProcessor
     
      def initialize(xml_sourcefile, split_filename_template)
        @split_filename_template = split_filename_template
        @file_handle = SplitFile.new(split_filename_template, 1000)
        @reader = XML::Reader.file(xml_sourcefile)
      end
     
      def run
        while @reader.read do
          self.process_node()
        end
      end
     
      def process_node
        if @reader.name == 'Product' && reader.node_type == XML::Reader::TYPE_ELEMENT
          @file_handle.write(@reader.read_outer_xml)
          @reader.next
        end
      end
     
    end
     
    # Main
    XMLSplitProcessor.new(XML_FILE, "batch_%s.xml").run

    Il tourne en 15min pour un fichier de 20Go.

    A l'avenir je vais avoir des fichiers de l'ordre de 150Go, et je voudrais prendre les devant en optimisant ces 15min.
    C'est pourquoi je me tourne vers le langage Go qui semble à propos.
    Mais je ne connais rien du tout. Du coup je tente de me dépatouiller avec ça, mais il n'y a encore fort peu de doc sur le Go, surtout traitant du XML.
    Si jamais vous avez des idées je suis preneur.

    Merci

  2. #2
    Membre averti Avatar de Kennel sébastien
    Homme Profil pro
    Développeur
    Inscrit en
    septembre 2008
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : septembre 2008
    Messages : 226
    Points : 327
    Points
    327

    Par défaut

    Bonjour delta07,

    Si déjà tu fais du Ruby, pourquoi pas plutôt le convertir en Crystal ?

    https://crystal-lang.org/

    Alors je ne sais pas, si c'est Go ou Crystal le plus rapide des deux pour cela, mais c'est sûr que ça sera bien plus rapide qu'en Ruby ;-).

    Voir Rust peut-être que c'est mieux…

    https://www.rust-lang.org/

    Je regarde si j'ai le temps à un moment, je te le convertie ;-)
    Vous cherchez à apprendre les bases en langage « C », « Go », « Rust », « PHP 7 », « Java 9 » ou « Python 3 » ? N'hésitez pas à me contacter par MP.

Discussions similaires

  1. Convertir script Python en Ruby
    Par zelegolas2 dans le forum Ruby
    Réponses: 2
    Dernier message: 03/05/2011, 18h53
  2. Packager des scripts Ruby ?
    Par GLDavid dans le forum Ruby
    Réponses: 4
    Dernier message: 03/03/2008, 17h15
  3. Licence Ruby et licence d'un script Ruby
    Par tsing dans le forum Ruby
    Réponses: 2
    Dernier message: 20/02/2008, 22h34
  4. Réponses: 3
    Dernier message: 07/11/2007, 17h26
  5. [VIM] Etendre VIM avec des scripts ruby
    Par swirtel dans le forum Ruby
    Réponses: 3
    Dernier message: 10/03/2007, 15h57

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