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

PL/SQL Oracle Discussion :

Problème espace dans Spool vers fichier texte


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 8
    Par défaut Problème espace dans Spool vers fichier texte
    Bonjour à toutes et à tous,

    J'essaie le spool vers un fichier texte d'une table Oracle sous Windows.
    Ceci ne marche pas très bien vu que j'ai une première ligne vide, des espaces entre les données récupérées.

    Mon code est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Spool on
    SET HEADING OFF
    SET FEEDBACK OFF
    SET TRIMSPOOL ON
    SET LINESIZE 10000
     
    spool c:\test1.txt
     
    SELECT * FROM MAM_UNIQUE;
     
    spool off
    Et le résultat est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    tt       tt tt    tt    20101203 20313030 14            551         4 O O COD O MICROSOFT    O 999999       O MED O 1321
    zz       zz zz    zz    20101203 21052323 20            zzz         z z z z   z z            z z            z z   z zz
    Une première ligne vide apparait sur le fichier !! (à enlever)
    Aussi des espaces entre chaque données la première colonne est sur huit octets la deuxième sur deux et la troisième sur cinq.
    Si l'on compte sur le fichier : la première données est sur huit caractères + espace + deux caractères + espace + cinq caractères + espace et ainsi de suite.

    J'aimerais effacer l'espace et n'afficher que les données des colonnes sans espaces et avec leurs tailles réelles, aussi dans le cas d'une donnée (4 bytes) nulle laisser l'espace (4 bytes) correspondant dans le fichier.

    Merci pour toute aide possible.

  2. #2
    Membre expérimenté
    Inscrit en
    Janvier 2010
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 135
    Par défaut
    > Une première ligne vide apparait sur le fichier !! (à enlever)

    set pagesize 0 (ou set pages 0)

    > J'aimerais effacer l'espace et n'afficher que les données des colonnes sans espaces et avec leurs tailles réelles

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select max(length(column1)), max(length(column2)), ... from MAM_UNIQUE;
    Pour colonne de type chaîne de caractères:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    col column1 for a<result from above query>
    col column2 for a<result from above query>
    ...
    Pour la colonne du type de entier:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    col column3 for <number of 9's based on above query>
     
    SQL> select max(length(x)) from t;
     
    MAX(LENGTH(X))
    --------------
                 4
     
    SQL> col x for 9999
    SQL> select x from t;
     
        X
    -----
     2010
    Si le nombre n'est pas un entier, c'est compliqué. Vous devez placer un point quelque part au milieu de 9999...

    Yong Huang

  3. #3
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 8
    Par défaut
    Merci Yong Huang pour ta réponse,

    > Une première ligne vide apparait sur le fichier !! (elle est enlevée, GRAND MERCI )

    Par contre sur le deuxième point, Je pense que je me suis mal exprimé !!
    Vu que sur le résultat que j'obtiens, il y a un espace qui apparait comme séparateur entre les données d'un enregistrement (les données sont séparées par un espace à chaque fois).

    Que je n'arrive pas à le supprimer

    J'ai essayé des trucs du genre COL1||COL2||COL3||... sur ma requête ca marche mais des que j'ai une données nulle ou vide. On ne préserve pas sa taille sur le fichier résultat.

    Au fait, mon but c'est d'avoir un fichier reprenant l'ensemble des données de cette table. Pour le transmettre à mon client final en lui disant que :

    sur les TROIS premiers caractères c'est le code appli, sur les huit caractères suivants c'est le code utilisateur est ainsi de suite.

    Donc si jamais une donnée vide n'est pas reprise (ou bien, on ne conserve pas un espace équivalent à sa taille) y aurai un problème.

  4. #4
    Membre expérimenté
    Inscrit en
    Janvier 2010
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 135
    Par défaut
    Citation Envoyé par hatimov Voir le message
    Par contre sur le deuxième point, Je pense que je me suis mal exprimé !!
    Vous-même très bien exprimé. Je vous comprends. Regardez cet exemple.

    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
    SQL> create table test (x varchar2(10), y varchar2(1));
     
    Table created.
     
    SQL> insert into test values ('X', 'Y');
     
    1 row created.
     
    SQL> select * from test;
     
    X          Y
    ---------- -
    X          Y
     
    SQL> select max(length(x)) from test;
     
    MAX(LENGTH(X))
    --------------
                 1
     
    SQL> col x for a1
    SQL> select * from test;
     
    X Y
    - -
    X Y
    Vous voulez supprimer les espaces entre X et Y. La commande col les supprime.

    Yong Huang

  5. #5
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 8
    Par défaut
    RE Yong Huang ,

    Sur ton exemple, si j'exécute le code suivant :

    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
     
     
    spool on
    SET HEADING OFF
    SET FEEDBACK OFF
    SET SPACE 0
    SET LINESIZE 10000
    SET TRIMSPOOL OFF
    SET PAGESIZE 0
     
    spool c:\test.txt
     
    select * from test;
     
    spool off

    je veux que le contenu de mon fichier résultat ressemble à ceci:

    X Y

    La colonne 1 a une taille de 10 bytes la seconde 1 byte
    donc sur le fichier résultant :
    la valeur X est complétée avec 9 ' '(espace) : égal à la taille de la colonne x<10 bytes>.

    et la valeur Y est sur 1 caractère : égal à la taille de la colonne y<1 byte>


    C'est sympa de ta part et Merci pour tout.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 8
    Par défaut
    Le format du fichier test.txt est :


  7. #7
    Membre expérimenté
    Inscrit en
    Janvier 2010
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 135
    Par défaut
    Enlevez
    SET SPACE 0
    Et ajoutez
    COL X FOR A1

    La commande COL est très importante pour votre besoin.

  8. #8
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 8
    Par défaut
    J'ai essayé la commande COL mais le problème demeure
    Si j'utilise Alors l'espace apparaît comme un séparateur de données sur le fichier.

    Je passe par l'autre chemin et je définis un séparateur, par exemple : ;| et je me ne casse plus la tête.

    Merci beaucoup !

Discussions similaires

  1. Réponses: 17
    Dernier message: 18/08/2014, 15h17
  2. Problème espace dans fichier
    Par slockstone dans le forum Linux
    Réponses: 2
    Dernier message: 16/12/2008, 23h02
  3. Problème espaces dans nom de fichier
    Par Mygush dans le forum Général Java
    Réponses: 9
    Dernier message: 31/10/2008, 12h21
  4. 3 listes dans XML vers fichier texte en XSLT
    Par ahelaine dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 31/07/2008, 11h27
  5. Problème espaces dans requête
    Par dl_jarod dans le forum ASP
    Réponses: 12
    Dernier message: 12/10/2005, 12h02

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