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

Requêtes PostgreSQL Discussion :

Lire un fichier .csv, .txt ou autre et séparer les chiffres et les chaines


Sujet :

Requêtes PostgreSQL

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2013
    Messages : 49
    Points : 39
    Points
    39
    Par défaut Lire un fichier .csv, .txt ou autre et séparer les chiffres et les chaines
    Bonjour à tous.

    Je l'intention de remplir une table en lisant un ficher .csv or .txt comme celui-ci:

    1 Cuando a los pocos días volvió Jesús a Cafarnaún, se supo que estaba en casa*. 2 Acudieron tantos que no quedaba sitio ni a la puerta. Y les proponía la palabra. 3 Y vinieron trayéndole un paralítico llevado entre cuatro 4 y, como no podían presentárselo por el gentío, levantaron la techumbre encima de donde él estaba, abrieron un boquete y descolgaron la camilla donde yacía el paralítico. 5 Viendo Jesús la fe que tenían, le dice al paralítico: «Hijo, tus pecados te son perdonados». 6 Unos escribas, que estaban allí sentados, pensaban para sus adentros: 7 «¿Por qué habla este así? Blasfema. ¿Quién puede perdonar pecados, sino solo uno, Dios?». 8 Jesús se dio cuenta enseguida de lo que pensaban y les dijo: «¿Por qué pensáis eso? 9 ¿Qué es más fácil, decir al paralítico: “Tus pecados te son perdonados”, o decir: “Levántate, coge la camilla y echa a andar”? 10 Pues, para que veáis que el Hijo del hombre tiene autoridad en la tierra para perdonar pecados —dice al paralítico—: 11 “Te digo: levántate, coge tu camilla y vete a tu casa”». 12 Se levantó, cogió inmediatamente la camilla y salió a la vista de todos. Se quedaron atónitos y daban gloria a Dios, diciendo: «Nunca hemos visto una cosa igual».
    Ma table a les colonnes suivantes :
    tbl_livre [id_livre(auto), chapitre(int), verset(int), texte(varchar)]

    Je voudrais, en exécutant une requête ou bien une procédure, lire mon fichier et insérer à chaque fois les valeurs numériques dans la colonne verset et les valeurs chaine dans la colonne texte. Donc dans ma table je devrais avoir :

    verset............texte
    1 .................Cuando a los pocos días volvió Jesús a Cafarnaún, se supo que estaba en casa*.
    2 .................Acudieron tantos que no quedaba sitio ni a la puerta. Y les proponía la palabra.

    etc...

    Est-il possible de lire un fichier assez considérable et extraire séparément les chiffres et les chaines ? Cela m'épargnerait de la faire à la main

    Merci d'avance pour votre aide.

  2. #2
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 476
    Points : 831
    Points
    831
    Par défaut
    bonjour,
    sur notepad ++ tu peux mettre en forme ton fichier texte
    tu vas dans le menu remplacer et dans cette fenetre tu fais un remplacement en utilisant les expressions regulieres
    dans le champs recherche tu mets: ([0-9]+)
    dans le champs remplacer par tu mets : \r\n\1_
    n'oublie pas de cocher le Expression régulière
    ton fichier est mis en forme pour tes 2 colonnes avec comme séparateur l'underscore "-"
    pour importer dans pg tu tapes la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    copy ma_table from 'chemin\fichier' with delimiter '_';

  3. #3
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    En utilisant:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT regexp_matches(tontexte, '([0-9]+) ([^0-9]+[^ 0-9])', 'g');

    Tu obtiendras un tableau de chaînes de caractères dont la première colonne est le numéro du verset et la deuxième son texte.

    [^0-9]+[^ 0-9] est une astuce pour trimer l'espace à droite.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2013
    Messages : 49
    Points : 39
    Points
    39
    Par défaut
    Merci por les responses.

    Celle de Notepad++ je ne l'ai pas essayé parce que je n'ai pas Notepad++ installé sur mon Mac, et parce que j'ai essayé l'idée de CosmoKnacki et elle marche, por le moment, quasi parfaitement.

    Je connais tres peu de SQL et puisque je voudrais mettre dans una base de donnés de milliers de pages, je voudrais créer une fonction pour simplifier le travail. J'ai l'idée dans la tête, mais pas les connaissances techniques pour la réaliser:

    Ma table rassemble à quelque chose comme cela:

    tbl_livre [id_livre(int), chapitre(int), verset(int), texte(varchar)]

    Ce que je pense c'est de creer un fichier .txt temporel dans lequel j'aurais dans la première ligne deux valeurs numériques qui serait ceux du livre et chapitre. En suite j'aurais mon texte dans le format déjà montré: verset, texte.

    La fonction devrait récupérer les deux valeur numériques de la première ligne du fichier, puis à chaque regex elle devrait insérer dans les colonnes livre et chapitre la valeur numérique prise dans la première ligne et, dans la colonne verset la valeur numérique trouvée dans le texte, et dans la colonne texte le texte a droite... Je pense que c'est la façon la plus simple de le faire.

    En faisant des essais je rencontre aussi deux autres problèmes.

    -Dans mon texte, il y a des parties où les guillemets simples sont presentes, donc j'ai droit a une erreur. Alors j'ai pensé à incorporer à la fonction des commandes pour contourner cela.

    -Dans le texte il y a aussi des tabulations, des sauts de page, des etoiles (*). Y-a-t-il une façon de les ignorer pour qu'ils ne soient pas inserés?

    Example du contenu du fichier:

    Premiere ligne (1 est le id_livre et 21 es le chapitre:

    1|21
    Lignes suivantes

    34 Él dijo: «Soy criado de Abrahán. 35 El Señor ha colmado de bendiciones a mi amo, que ha prosperado; le ha dado ovejas y vacas, plata y oro, siervos y siervas, camellos y asnos. 36 Sara, la mujer de mi amo, le ha dado un hijo en su vejez; y a él le ha cedido todos sus bienes. 37 Mi amo me hizo prestar este juramento: “No tomarás mujer para mi hijo de entre las hijas de los cananeos, en cuya tierra habito, 38 sino que irás a casa de mis padres y mis parientes y allí tomarás mujer para mi hijo”. 39 Yo contesté a mi amo: “¿Y si la mujer no quiere venir conmigo?”. 40 Él replicó: “El Señor, en cuya presencia he caminado, enviará su ángel contigo y dará éxito a tu viaje, y así tomarás mujer para mi hijo en la casa de mi padre y mis parientes. 41 Pero quedarás libre de mi maldición si, llegado a casa de mis parientes, no te la quieren dar; entonces quedarás libre de mi maldición”. 42 Cuando llegué hoy a la fuente, dije: “Señor, Dios de mi amo Abrahán, si quieres dar éxito al viaje que he emprendido, 43 aquí estoy junto a la fuente; la muchacha que salga a sacar agua y yo le diga: Dame de beber un poco de agua de tu cántaro, 44 y ella me responda: ‘Bebe tú y sacaré también para tus camellos’, esa será la mujer que el Señor destina para el hijo de mi amo”. 45 Apenas había acabado yo de hablar para mis adentros, cuando salía Rebeca con su cántaro al hombro. Bajó a la fuente, sacó agua y le dije: “Por favor, dame de beber”. 46 Ella enseguida bajó el cántaro de su hombro y me respondió: “Bebe tú y abrevaré también tus camellos”. Bebí yo y ella abrevó también los camellos. 47 Y le pregunté: “¿De quién eres hija?”. Me respondió: “De Betuel, hijo de Najor y Milcá”. Entonces le puse un anillo en la nariz y pulseras en los brazos, 48 y me incliné en adoración al Señor, bendiciendo al Señor, Dios de mi amo Abrahán, que me ha guiado por el camino justo, para llevar al hijo de mi amo la hija de su hermano. 49 Ahora, pues, si queréis ser benévolos y leales con mi amo, decídmelo; y si no, decídmelo también, para actuar en consecuencia».
    50 Labán y Betuel le contestaron: «El asunto viene del Señor; nosotros no podemos responderte bien o mal. 51 Ahí tienes a Rebeca, tómala y vete, y sea la mujer del hijo de tu amo, como el Señor ha dicho».
    Merci encore pour votre précieuse aide.

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/09/2014, 22h28
  2. Ouvrir et lire un fichier .csv
    Par Art19 dans le forum Composants VCL
    Réponses: 20
    Dernier message: 12/08/2007, 23h18
  3. Lire un fichier CSV ou XLS de la même manière
    Par Linio dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/07/2007, 15h12
  4. Réponses: 12
    Dernier message: 12/04/2006, 10h20
  5. Lire un fichier CSV/XLS
    Par Doneve dans le forum ASP
    Réponses: 3
    Dernier message: 04/10/2005, 17h34

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