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

C++Builder Discussion :

VB Array(1, 2) correspondance en C++


Sujet :

C++Builder

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 94
    Points : 53
    Points
    53
    Par défaut VB Array(1, 2) correspondance en C++
    Bonjour,
    Je du code en VB qui est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Workbooks.OpenText Filename:="C:\zz.txt", Origin:=xlMSDOS(3), StartRow:=1(1), _
            DataType:=xlDelimited(1), TextQualifier:=xlDoubleQuote(1), ConsecutiveDelimiter _
            :=False(), Tab:=False(), Semicolon:=True(), Comma:=False(), Space:=False(), _
            Other:=False(), FieldInfo:=Array(Array(1, 2), Array(2, 2)), TrailingMinusNumbers:=True
    que je voudrais convertir en C++
    vXLWorkbooks.OleFunction("Open", NomCheminFichier.c_str(), 3, 1, 1, 1, 0, 0, 1, 0, 0, 0, ARRAY_CPP, 1); //vXLWorkbooks étant un Variant
    le seul pb est que je n'arrive pas à faire le ARRAY_CPP,
    j'ai fait pas mal de test mais en vain, je me retourne vers vous pour de l'aide.
    Merci d'avance.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 118
    Points : 93
    Points
    93
    Par défaut
    Bonjour,

    dans le cadre de mon logiciel, j'ai dévelloppez un bout de code avec la fonction
    "OpenText" pour l'OLE Excel. Avec ça tu devrais facilement répondre à ton
    problème. N'hésite pas à me recontacter pour plus d'infos.

    http://www.developpez.net/forums/sho...d.php?t=169835

    @+

    Xav

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 94
    Points : 53
    Points
    53
    Par défaut
    Bonjour et merci Xav++ mais pourrais-tu me donner le fichier que tu ouvre car moi j'ai fait un test avec un fichier txt séparé par points virgules avec 4 colonnes ou 3 ou 2 ou 1 mais c'est pareil ça marche pas, j'ai toujours l'erreur suivante :
    Le projet Project1.exe a provoqué une classe d'exception EOleSysError avec le message 'Type de variable incorrect'. Processus stoppé. Utilisez Pas-à-pas ou Exécuter pour continuer.
    Je sèche aprés plusieurs modifications en vain.
    Merci d'avance.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 118
    Points : 93
    Points
    93
    Par défaut
    As tu essayé de débogger pas à pas ? Sur quelle ligne l'erreur se produit-elle ?
    Mon fichier est un fichier texte de 3 colonnes séparés par un ";". Rien de
    spécifique

    Pouurais tu également mettre ton code que je regarde tout cela

    @+

    Xav

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 94
    Points : 53
    Points
    53
    Par défaut
    J’ai fait un copier coller du bout de code de ton post et je remplaçais la variable nf sur la ligne de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AnsiString vFileName = nf; //nom du fichier
    par "c:\\test.txt" ce dernier étant un fichier texte avec trois colonnes séparés par points virgules.
    et ça bloque à l'appel de la fonction OpenText vXLWorkbook = vXLWorkbooks.OleFunction(""OpenText", ...
    le fichier "sysvari.h" s'ouvre sur les lignes de codes suivantes :
    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
      template <class P1, class P2, class P3, class P4, class P5,
                class P6, class P7, class P8, class P9, class P10,
                class P11, class P12, class P13>
      Variant Variant::OleFunction(const String& name,
        P1 p1, P2 p2, P3 p3, P4 p4, P5 p5,
        P6 p6, P7 p7, P8 p8, P9 p9, P10 p10,
        P11 p11, P12 p12, P13 p13)
      {
        TAutoArgs<13> args;
        args[1] = p1;  args[2] = p2;  args[3] = p3;
        args[4] = p4;  args[5] = p5;  args[6] = p6;
        args[7] = p7;  args[8] = p8;  args[9] = p9;
        args[10] = p10;  args[11] = p11;  args[12] = p12;
        args[13] = p13;
        return OleFunction(name, static_cast<TAutoArgsBase*>(&args));
      }
    surligné sur la dernière ligne (return ...)

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 118
    Points : 93
    Points
    93
    Par défaut
    Pour le moment la seule différence que je vois c'est que mon fichier texte a une extension .xls et non .txt (je sais je triche un peu ) mais bon

    Au niveau de vFieldInfo, tu a repris mon tableau avec les mêmes valeurs ou tu en as mis d'autres ?

  7. #7
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Je suis ton post qui est tres interressant Xav++

    j'ai juste modifie la declaration de vFileName et le nom de chemin du fichier a charger, si j'ouvre sans m'occuper des champs pas de probleme.
    String vFileName;

    vFileName = "C:\\Documents and Settings\\blondelle\\Mes documents\\plan_gps\\PLAN_GPS\\télégraphe";
    je charge un fichier csv qui va remplir 21 colonnes j'ai egalement une erreur comme sony351 et je suis sur que cela vient de la declaration vFieldInfo
    vFieldInfo = VarArrayCreate(OPENARRAY(int, (0, 2, 0, 1)), varInteger);
    et
    vFieldInfo.PutElement(1,0,0); //on affecte 1 (Colonne Excel N°1) à la ligne 0 colonne 0 du tab
    vFieldInfo.PutElement(2,0,1); //on affecte 2 (Format Texte = 2) à la ligne 0 colonne 1 du tab
    j'ai consulte l'aide en ligne pour OPENARRAY ,mais je n'ai pas compris comment cela marche, dans la declaration Create a quoi correspondent les differents champs, idem dans la declaration PutElement.
    merci pour la reponse que tu apportera.
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 118
    Points : 93
    Points
    93
    Par défaut
    Bon je vais essayé de relire mon code

    Dans notre cas vFieldInfo est un tableau d'entiers à 2 dimensions,
    Dans notre exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    vFieldInfo = VarArrayCreate(OPENARRAY(int, (0, 2, 0, 1)), varInteger);
    int et varInteger : on veut un tableau d'entiers
    0,2,0,1 : un tableau de 3 lignes numérotées de 0 à 2 et de 2 colonnes numérotées de 0 à 1

    En gros on veut ça : avec x et y les coordonnées
    ______________
    | x0;y0 | x0;y1 |
    ______________
    | x1;y0 | x1;y1 |
    ______________
    | x2;y0 | x2;y1 |
    _________ _____

    Si on appelle z la valeur affectée au point de coordonnées (x,y), on remplit le tableau avec le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    vFieldInfo.PutElement(z,x,y); //on affecte z au point (x,y) du tableau
    Donc si tu veux formater l'ensemble de tes 21 colonnes au format texte par exemple du dois faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    vFieldInfo = VarArrayCreate(OPENARRAY(int, (0, 20, 0, 1)), varInteger); //21 lignes pour tes 21 colonnes Excel !
    for (int i = 0; i<21; i++)
     {
      vFieldInfo.PutElement(i+1,i,0);  // i+1 correspond au N° de colonne Excel de 1 à 21
      vFieldInfo.PutElement(2,i,y);  // 2 = format texte
     }
    Voilà j'espère avoir été clair Mais c'est pas facile avec ces lignes et colonnes

    Xav

  9. #9
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Merci pour ta reponse Xav++.
    C'est ce que j'avais cru comprendre et j'ai fait un essai mais pas dans une boucle j'ai repris ton principe de codage. Je suis partis sur un format texte meme pour les nombres parceque Excel gerant des variants ca ne le gene absolument pas si on recupere ces valeur pour des calculs.
    J'ai quand meme une erreur "Type de variable incorrecte" et dans l'onglet "sysvari.h" qui s'ouvre l'argument m_Arrayest est a {????} j'en deduit que le probleme est dans le tableau.
    Je poste le code je n'ai pas vu l'erreur
    le code:
    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
    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
     
     
    #include <vcl.h>
    #pragma hdrstop
     
    #include "OPEN_FICHIER_TXT.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    String vFileName;
    // Ouverture d'Excel et traitement du fichier
     Variant vXLWorkbooks, vXLWorkbook, vMSExcel;
     vFileName = "C:\\Documents and Settings\\blondelle\\Mes documents\\plan_gps\\PLAN_GPS\\télégraphe"; //nom du fichier
     Variant vOrigin = 1; // = xlWindows format Windows (par défaut)
     Variant vStartRow = 1; // on commence à la 1ère ligne (par défaut)
     Variant vDataType = 1; // = xlDelimited format délimité (par défaut)
     Variant vTextQualifier = 1; // = xlTextQualifierDoubleQuote qualificateur de texte (par défaut)
     Variant vConsecutiveDelimiter = false; // pas de délimitateur consécutif
     Variant vTab = false; // pas délimitateur tab
     Variant vSemicolon = true; // délimitateur ";"
     Variant vComma = false; // pas délimitateur virgule
     Variant vSpace = false; // pas délimitateur espace
     Variant vOther = false; // pas délimitateur autre
     Variant vOtherChar = ""; // délimitateur Other non actif
     
     Variant vFieldInfo;    // On veut {{1,2},{2,2},{3,4}}
    //vFieldInfo = VarArrayCreate(OPENARRAY(int, (X, NB de colonnes, X, X)), varInteger);
     vFieldInfo = VarArrayCreate(OPENARRAY(int, (0, 20, 0, 1)), varInteger);
     
    //vFieldInfo.PutElement(Colonne Excel, ligne 0, colonne 0);// du tableau
    //vFieldInfo.PutElement(Format Texte = 2, ligne 0, colonne 1);// du tableau
     vFieldInfo.PutElement(1,0,0); //on affecte 1 (Colonne Excel N°1) à la ligne 0 colonne 0 du tab
     vFieldInfo.PutElement(2,0,1); //on affecte 2 (Format Texte = 2) à la ligne 0 colonne 1 du tab
     
     vFieldInfo.PutElement(2,1,0); //on affecte 2 (Colonne Excel N°2) à la ligne 1 colonne 0 du tab
     vFieldInfo.PutElement(2,1,1); //on affecte 2 (Format Texte = 2) à la ligne 1 colonne 1 du tab
     
     vFieldInfo.PutElement(3,2,0); //on affecte 3 (Colonne Excel N°3) à la ligne 2 colonne 0 du tab
     vFieldInfo.PutElement(2,2,1); //on affecte 2 (Format Date JMA = 4) à la ligne 2 colonne 1 du tab
     
     vFieldInfo.PutElement(4,3,0); //on affecte 1 (Colonne Excel N°4) à la ligne 3 colonne 0 du tab
     vFieldInfo.PutElement(2,3,1); //on affecte 2 (Format Texte = 2) à la ligne 3 colonne 1 du tab
     
     vFieldInfo.PutElement(5,4,0); //on affecte 2 (Colonne Excel N°5) à la ligne 4 colonne 0 du tab
     vFieldInfo.PutElement(2,4,1); //on affecte 2 (Format Texte = 2) à la ligne 4 colonne 1 du tab
     
     vFieldInfo.PutElement(6,5,0); //on affecte 3 (Colonne Excel N°6) à la ligne 5 colonne 0 du tab
     vFieldInfo.PutElement(2,5,1); //on affecte 2 (Format Date JMA = 4) à la ligne 5 colonne 1 du tab
     
     vFieldInfo.PutElement(7,6,0); //on affecte 1 (Colonne Excel N°7) à la ligne 6 colonne 0 du tab
     vFieldInfo.PutElement(2,6,1); //on affecte 2 (Format Texte = 2) à la ligne 6 colonne 1 du tab
     
     vFieldInfo.PutElement(8,7,0); //on affecte 2 (Colonne Excel N°8) à la ligne 7 colonne 0 du tab
     vFieldInfo.PutElement(2,7,1); //on affecte 2 (Format Texte = 2) à la ligne 7 colonne 1 du tab
     
     vFieldInfo.PutElement(9,8,0); //on affecte 3 (Colonne Excel N°9) à la ligne 8 colonne 0 du tab
     vFieldInfo.PutElement(2,8,1); //on affecte 2 (Format Date JMA = 4) à la ligne 8 colonne 1 du tab
     
     vFieldInfo.PutElement(10,9,0); //on affecte 1 (Colonne Excel N°10) à la ligne 9 colonne 0 du tab
     vFieldInfo.PutElement(2,9,1); //on affecte 2 (Format Texte = 2) à la ligne 9 colonne 1 du tab
     
     vFieldInfo.PutElement(11,10,0); //on affecte 2 (Colonne Excel N°11) à la ligne 10 colonne 0 du tab
     vFieldInfo.PutElement(2,10,1); //on affecte 2 (Format Texte = 2) à la ligne 10 colonne 1 du tab
     
     vFieldInfo.PutElement(12,11,0); //on affecte 3 (Colonne Excel N°12) à la ligne 11 colonne 0 du tab
     vFieldInfo.PutElement(2,11,1); //on affecte 2 (Format Date JMA = 4) à la ligne 11 colonne 1 du tab
     
     vFieldInfo.PutElement(13,12,0); //on affecte 1 (Colonne Excel N°13) à la ligne 12 colonne 0 du tab
     vFieldInfo.PutElement(2,12,1); //on affecte 2 (Format Texte = 2) à la ligne 12 colonne 1 du tab
     
     vFieldInfo.PutElement(14,13,0); //on affecte 2 (Colonne Excel N°14) à la ligne 13 colonne 0 du tab
     vFieldInfo.PutElement(2,13,1); //on affecte 2 (Format Texte = 2) à la ligne 13 colonne 1 du tab
     
     vFieldInfo.PutElement(15,14,0); //on affecte 3 (Colonne Excel N°15) à la ligne 14 colonne 0 du tab
     vFieldInfo.PutElement(2,14,1); //on affecte 2 (Format Date JMA = 4) à la ligne 14 colonne 1 du tab
     
     vFieldInfo.PutElement(16,15,0); //on affecte 1 (Colonne Excel N°16) à la ligne 15 colonne 0 du tab
     vFieldInfo.PutElement(2,15,1); //on affecte 2 (Format Texte = 2) à la ligne 15 colonne 1 du tab
     
     vFieldInfo.PutElement(17,16,0); //on affecte 2 (Colonne Excel N°17) à la ligne 16 colonne 0 du tab
     vFieldInfo.PutElement(2,16,1); //on affecte 2 (Format Texte = 2) à la ligne 16 colonne 1 du tab
     
     vFieldInfo.PutElement(18,17,0); //on affecte 3 (Colonne Excel N°18) à la ligne 17 colonne 0 du tab
     vFieldInfo.PutElement(2,17,1); //on affecte 2 (Format Date JMA = 4) à la ligne 17 colonne 1 du tab
     
     vFieldInfo.PutElement(19,18,0); //on affecte 1 (Colonne Excel N°19) à la ligne 18 colonne 0 du tab
     vFieldInfo.PutElement(2,18,1); //on affecte 2 (Format Texte = 2) à la ligne 18 colonne 1 du tab
     
     vFieldInfo.PutElement(20,19,0); //on affecte 2 (Colonne Excel N°20) à la ligne 19 colonne 0 du tab
     vFieldInfo.PutElement(2,19,1); //on affecte 2 (Format Texte = 2) à la ligne 19 colonne 1 du tab
     
     vFieldInfo.PutElement(21,20,0); //on affecte 3 (Colonne Excel N°21) à la ligne 20 colonne 0 du tab
     vFieldInfo.PutElement(2,20,1); //on affecte 2 (Format Date JMA = 4) à la ligne 20 colonne 1 du tab
     
     vMSExcel = Variant::CreateObject("Excel.Application");
     vMSExcel.OlePropertySet("Visible", true);
     vXLWorkbooks = vMSExcel.OlePropertyGet("Workbooks");
     vXLWorkbook = vXLWorkbooks.OleFunction("OpenText", vFileName.c_str(), vOrigin, vStartRow, vDataType, vTextQualifier, vConsecutiveDelimiter, vTab, vSemicolon, vComma, vSpace, vOther, vOtherChar, vFieldInfo);
    }
    dommage que l'aide bcb ne soit pas aussi claire que ton explication
    je te remercie Xav++
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 118
    Points : 93
    Points
    93
    Par défaut

    Bon chez moi ça fonctionne sur mon exemple. Plusieurs possibilité :

    1) mon fichier a l'extension .xls et toi aucune ! J'y crois qd même pas trop.
    2) je suis sous bcb5 et toi sur une autre version peut être
    3) essaye en modifiant ton code comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    vXLWorkbook = vXLWorkbooks.OleFunction("OpenText", vFileName.c_str(), vOrigin, vStartRow, vDataType, vTextQualifier, vConsecutiveDelimiter, vTab, vSemicolon, vComma, vSpace, vOther, vOtherChar); //, vFieldInfo);
    Si ça fonctionne on sera sur que cela vient du tableau

    Je pourrais tester ton code avec mon programme demain en fin d'après midi.
    Tiens moi au courant d'ici là.

    Xav

  11. #11
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Xav++ a ecrit
    Bon chez moi ça fonctionne sur mon exemple. Plusieurs possibilité :

    1) mon fichier a l'extension .xls et toi aucune ! J'y crois qd même pas trop.
    2) je suis sous bcb5 et toi sur une autre version peut être
    3) essaye en modifiant ton code comme suit :
    mon fichier a une extension csv en recopiant je l'ai efface, le delimiteur est le ";"
    en supprimant "//, vFieldInfo);" j'ai encore l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    vXLWorkbook = vXLWorkbooks.OleFunction("OpenText", vFileName.c_str(), vOrigin, vStartRow, vDataType, vTextQualifier, vConsecutiveDelimiter, vTab, vSemicolon, vComma, vSpace, vOther, vOtherChar);//, vFieldInfo);
    comme cela ca fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     vXLWorkbook = vXLWorkbooks.OleFunction("OpenText", vFileName.c_str());
    j'utilise BCB 6.

    Je te remercie Xav++
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  12. #12
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Je viens de proceder par elimination et la ca fonctionne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // Variant vOtherChar = ""; // délimitateur Other non actif
     
    vXLWorkbook = vXLWorkbooks.OleFunction("OpenText", vFileName.c_str(), vOrigin, vStartRow, vDataType, vTextQualifier, vConsecutiveDelimiter, vTab, vSemicolon, vComma, vSpace, vOther);//, vOtherChar);//, vFieldInfo);
    apparement ce serait "vOtherChar" qui provoque l'erreur il serait interressant de savoir la version de BCB de sony351 et si il a procede au meme essai de suppression de "vOtherChar" qui est pourtant declare comme Variant si je trouve une solution je la poste.
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  13. #13
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    J'ai trouve la solution c'est trop NULL c'est le cas de le dire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     Variant vOtherChar = NULL; // délimitateur Other non actif
    Il suffit simplement de remplacer la chaine vide par NULL et ca fonctionne c'est a pleurer tellement c'est bete.

    Si tu essai sur ta version de BCB est ce que cela va marcher??? , ce serait interressant de le savoir y a t'il une difference entre BCB5 et BCB6.

    merci Xav++
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 118
    Points : 93
    Points
    93
    Par défaut
    En effet, ça parait tellemnt évident que je ne comprends même pas comment
    j'ai pu mettre "" au lieu de NULL
    J'essaierai cela chez moi ce soir.

    Par contre as tu réussi à enregistrer ton fichier après modification ?????
    Rappelle toi, c'était mon problème et je ne l'ai jamais résolu

    On va finir par y arriver à utiliser ce p***** de logiciel de microsoft

    Xav

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 94
    Points : 53
    Points
    53
    Par défaut
    Merci beaucoup Monsieur Xav++ et Monsieur blondelle
    :-p

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 118
    Points : 93
    Points
    93
    Par défaut
    de rien, n'oublie pas le petit

  17. #17
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Xav++ a ecrit
    En effet, ça parait tellemnt évident que je ne comprends même pas comment
    j'ai pu mettre "" au lieu de NULL
    J'essaierai cela chez moi ce soir.

    Par contre as tu réussi à enregistrer ton fichier après modification ?????
    Rappelle toi, c'était mon problème et je ne l'ai jamais résolu

    On va finir par y arriver à utiliser ce p***** de logiciel de microsoft

    Xav
    J'ai corrige une derniere petite erreur si on veut un separateur autre il faut ecrire.
    Variant vOtherChar = ';'; // ici ca marche
    Si on utilise ";" il y a une erreur deVariant

    J'arrive a ouvrir mon fichier de typt csv je vais faire l'essai avec un fichier texte pour voir

    Pour enregistrer un fichier sous j'ai reussi il y a eut un post je recherche le lien et je te le donne
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  18. #18
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Xav++ a ecrit
    Par contre as tu réussi à enregistrer ton fichier après modification ?????
    Rappelle toi, c'était mon problème et je ne l'ai jamais résolu
    le lien pour la sauvegarde SaveSous
    Je n'ai pas tout resolu mais ca marche quand meme
    S'il te manque quelque chose fais le savoir.
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  19. #19
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Je viens de faire un essai avec mon fichier au format txt et ca fonctionne le fichier se charge correctement mes colonnes sont bien au format txt.ton programme est super et meriterait d'etre dans la FAQ parceque l'ouverture des fichiers texte a deja donne lieu a de nombreux post.
    Je donne le code complet qui fonctionne chez moi il n'est pas optimise ce n'etait qu'un essai.

    le code:
    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
    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
     
    #include <vcl.h>
    #pragma hdrstop
     
    #include "OPEN_FICHIER_TXT.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    String vFileName;
    // Ouverture d'Excel et traitement du fichier
     Variant vXLWorkbooks, vXLWorkbook, vMSExcel;
     vFileName = "C:\\Documents and Settings\\blondelle\\Mes documents\\plan_gps\\PLAN_GPS\\télégraphe1.txt"; //nom du fichier
     Variant vOrigin = 1; // = xlWindows format Windows (par défaut)
     Variant vStartRow = 1; // on commence à la 1ère ligne (par défaut)
     Variant vDataType = 1; // = xlDelimited format délimité (par défaut)
     Variant vTextQualifier = 1; // = xlTextQualifierDoubleQuote qualificateur de texte (par défaut)
     Variant vConsecutiveDelimiter = false; // pas de délimitateur consécutif
     Variant vTab = false; // pas délimitateur tab
     Variant vSemicolon = true; // délimitateur ";"
     Variant vComma = false; // pas délimitateur virgule
     Variant vSpace = false; // pas délimitateur espace
     Variant vOther = false; // pas délimitateur autre
     Variant vOtherChar = NULL; // délimitateur Other non actif = NULL, actif = ':'
     
     Variant vFieldInfo;    // On veut {{1,2},{2,2},{3,4}}
    //vFieldInfo = VarArrayCreate(OPENARRAY(int, (N° de ligne, NB de colonnes, X, X)), varInteger);
     vFieldInfo = VarArrayCreate(OPENARRAY(int, (0, 10, 0, 1)), varInteger);
     
    //vFieldInfo.PutElement(N° de la Colonne Excel, ligne 0 du tableau, colonne 0 du tableau);// du tableau
    //vFieldInfo.PutElement(Format Texte = 2 de la colonne, ligne 0 du tableau, colonne 1 du tableau);// du tableau
     vFieldInfo.PutElement(1,0,0); //on affecte 1 (Colonne Excel N°1) à la ligne 0 colonne 0 du tab
     vFieldInfo.PutElement(2,0,1); //on affecte 2 (Format Texte = 2) à la ligne 0 colonne 1 du tab
     
     vFieldInfo.PutElement(2,1,0); //on affecte 2 (Colonne Excel N°2) à la ligne 1 colonne 0 du tab
     vFieldInfo.PutElement(2,1,1); //on affecte 2 (Format Texte = 2) à la ligne 1 colonne 1 du tab
     
     vFieldInfo.PutElement(3,2,0); //on affecte 3 (Colonne Excel N°3) à la ligne 2 colonne 0 du tab
     vFieldInfo.PutElement(2,2,1); //on affecte 2 (Format Date JMA = 4) à la ligne 2 colonne 1 du tab
     
     vFieldInfo.PutElement(4,3,0); //on affecte 1 (Colonne Excel N°4) à la ligne 3 colonne 0 du tab
     vFieldInfo.PutElement(2,3,1); //on affecte 2 (Format Texte = 2) à la ligne 3 colonne 1 du tab
     
     vFieldInfo.PutElement(5,4,0); //on affecte 2 (Colonne Excel N°5) à la ligne 4 colonne 0 du tab
     vFieldInfo.PutElement(2,4,1); //on affecte 2 (Format Texte = 2) à la ligne 4 colonne 1 du tab
     
     vFieldInfo.PutElement(6,5,0); //on affecte 3 (Colonne Excel N°6) à la ligne 5 colonne 0 du tab
     vFieldInfo.PutElement(2,5,1); //on affecte 2 (Format Date JMA = 4) à la ligne 5 colonne 1 du tab
     
     vFieldInfo.PutElement(7,6,0); //on affecte 1 (Colonne Excel N°7) à la ligne 6 colonne 0 du tab
     vFieldInfo.PutElement(2,6,1); //on affecte 2 (Format Texte = 2) à la ligne 6 colonne 1 du tab
     
     vFieldInfo.PutElement(8,7,0); //on affecte 2 (Colonne Excel N°8) à la ligne 7 colonne 0 du tab
     vFieldInfo.PutElement(2,7,1); //on affecte 2 (Format Texte = 2) à la ligne 7 colonne 1 du tab
     
     vFieldInfo.PutElement(9,8,0); //on affecte 3 (Colonne Excel N°9) à la ligne 8 colonne 0 du tab
     vFieldInfo.PutElement(2,8,1); //on affecte 2 (Format Date JMA = 4) à la ligne 8 colonne 1 du tab
     
     vFieldInfo.PutElement(10,9,0); //on affecte 1 (Colonne Excel N°10) à la ligne 9 colonne 0 du tab
     vFieldInfo.PutElement(2,9,1); //on affecte 2 (Format Texte = 2) à la ligne 9 colonne 1 du tab
     
     vFieldInfo.PutElement(11,10,0); //on affecte 2 (Colonne Excel N°11) à la ligne 10 colonne 0 du tab
     vFieldInfo.PutElement(2,10,1); //on affecte 2 (Format Texte = 2) à la ligne 10 colonne 1 du tab
     
    // vFieldInfo.PutElement(12,11,0); //on affecte 3 (Colonne Excel N°12) à la ligne 11 colonne 0 du tab
    // vFieldInfo.PutElement(2,11,1); //on affecte 2 (Format Date JMA = 4) à la ligne 11 colonne 1 du tab
     
    // vFieldInfo.PutElement(13,12,0); //on affecte 1 (Colonne Excel N°13) à la ligne 12 colonne 0 du tab
    // vFieldInfo.PutElement(2,12,1); //on affecte 2 (Format Texte = 2) à la ligne 12 colonne 1 du tab
     
    // vFieldInfo.PutElement(14,13,0); //on affecte 2 (Colonne Excel N°14) à la ligne 13 colonne 0 du tab
    // vFieldInfo.PutElement(2,13,1); //on affecte 2 (Format Texte = 2) à la ligne 13 colonne 1 du tab
     
    // vFieldInfo.PutElement(15,14,0); //on affecte 3 (Colonne Excel N°15) à la ligne 14 colonne 0 du tab
    // vFieldInfo.PutElement(2,14,1); //on affecte 2 (Format Date JMA = 4) à la ligne 14 colonne 1 du tab
     
    // vFieldInfo.PutElement(16,15,0); //on affecte 1 (Colonne Excel N°16) à la ligne 15 colonne 0 du tab
    // vFieldInfo.PutElement(2,15,1); //on affecte 2 (Format Texte = 2) à la ligne 15 colonne 1 du tab
     
    // vFieldInfo.PutElement(17,16,0); //on affecte 2 (Colonne Excel N°17) à la ligne 16 colonne 0 du tab
    // vFieldInfo.PutElement(2,16,1); //on affecte 2 (Format Texte = 2) à la ligne 16 colonne 1 du tab
     
    // vFieldInfo.PutElement(18,17,0); //on affecte 3 (Colonne Excel N°18) à la ligne 17 colonne 0 du tab
    // vFieldInfo.PutElement(2,17,1); //on affecte 2 (Format Date JMA = 4) à la ligne 17 colonne 1 du tab
     
    // vFieldInfo.PutElement(19,18,0); //on affecte 1 (Colonne Excel N°19) à la ligne 18 colonne 0 du tab
    // vFieldInfo.PutElement(2,18,1); //on affecte 2 (Format Texte = 2) à la ligne 18 colonne 1 du tab
     
    // vFieldInfo.PutElement(20,19,0); //on affecte 2 (Colonne Excel N°20) à la ligne 19 colonne 0 du tab
    // vFieldInfo.PutElement(2,19,1); //on affecte 2 (Format Texte = 2) à la ligne 19 colonne 1 du tab
     
    // vFieldInfo.PutElement(21,20,0); //on affecte 3 (Colonne Excel N°21) à la ligne 20 colonne 0 du tab
    // vFieldInfo.PutElement(2,20,1); //on affecte 2 (Format Date JMA = 4) à la ligne 20 colonne 1 du tab
     
     vMSExcel = Variant::CreateObject("Excel.Application");
     vMSExcel.OlePropertySet("Visible", true);
     vXLWorkbooks = vMSExcel.OlePropertyGet("Workbooks");
    vXLWorkbook = vXLWorkbooks.OleFunction("OpenText", vFileName.c_str(), vOrigin, vStartRow, vDataType, vTextQualifier, vConsecutiveDelimiter, vTab, vSemicolon, vComma, vSpace, vOther, vOtherChar, vFieldInfo);
     }
    dis moi si ca fonctionne pour toi Xav++ a y etre que ca fonctionne correctement
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  20. #20
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 118
    Points : 93
    Points
    93
    Par défaut
    Merci Blondelle pour les infos d'enregistrement et les corrections.
    Je regarde ça ce soir et je te tiens au courant

    Si les modo veulent ajouter le code à la FAQ je me tiens à leur dispo pour rédiger l'article.

    Xav

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. correspondances entre arrays
    Par Jasmine80 dans le forum Langage
    Réponses: 2
    Dernier message: 14/11/2007, 08h41
  2. TStringList en array of string
    Par JediKerian dans le forum Langage
    Réponses: 2
    Dernier message: 20/03/2003, 15h37
  3. Réponses: 2
    Dernier message: 23/02/2003, 00h49
  4. passage en paramètre d'un array dynamique 2D
    Par Guigui_ dans le forum Langage
    Réponses: 4
    Dernier message: 27/11/2002, 19h47

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