Transcription Basic en C

Messages postés
75
Date d'inscription
samedi 7 juillet 2007
Statut
Membre
Dernière intervention
29 mars 2015
-
Bonjour,

J'ai une lecture de fichier en visual Basic et je souhaiterais le transcrire en langage C.

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Dim Compteur As Integer
        Dim s As String = "teststring"
        Dim action As String
        Dim id_med As String
        Dim user As String
        Dim code_labo As String
        Dim open As String
        FileOpen(1, "C:\etilab\import\CBLEtilab.ini", OpenMode.Input)
        Compteur = -1
        While Not EOF(1)
            Compteur = Compteur + 1
            Input(1, s)
            If Compteur = 0 Then
                action = s
            End If
            If Compteur = 1 Then
                id_med = s
            End If
            If Compteur = 2 Then
                user = s
            End If
            If Compteur = 3 Then
                code_labo = s
            End If
            If Compteur = 4 Then
                open = s
            End If
        End While
        FileClose(1)
    End Sub


Pouvez-vous m'aider ?


Isabelle

Edit: ajout de la colorisation syntaxique. Plus d'infos ici
Afficher la suite 

12 réponses

Messages postés
3801
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 novembre 2019
90
0
Merci
Bonjour.

Aucun souci. Poste ta traduction (dans des balises de code) et nous t'aiderons à la corriger.

__________________________________________________________________________________________________

Améliorez votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
Commenter la réponse de cptpingu
0
Merci
Bonjour,

Voici mon code en langage C. L'instruction Input(1, s); est fausse.


#include <stdio.h>
#include <stdlib.h>


int main()
{
    int Compteur;
    char s = 'A';
    char action;
    char id_med;
    char user;
    char code_labo;
    char open;
    FILE * f;

    f = fopen("c:\\etilab\\import\\CBLEtilab.ini", "r");

    Compteur = -1;
    while( !feof(f))
    {
        Compteur = Compteur + 1;
        Input(1, s);
        if (Compteur = 0)
           {
               action = s;
           }
        if (Compteur = 1)
           {
               id_med = s;
           }
        if (Compteur = 2)
           {
               user = s;
           }
        if (Compteur = 3)
           {
               code_labo = s;
           }
        if (Compteur = 4)
           {
               open = s;
           }
    }
        fclose (f);




    return 0;
}


Merci de votre aide

A bientôt
Commenter la réponse de Perles
Messages postés
3801
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 novembre 2019
90
0
Merci
Il me manque des détails pour pouvoir t'aider:
- Que fait Input(1, s) précisement ?
- La variable "s" est une chaîne de caractères, ou un simple caractère ?
- Si ce sont des chaînes de caractères, quelle est la taille maximale ? (En C, il n'existe pas de type "string", on fait un tableau de caractères dont la taille maximale doit être connue).
- Que contient ton fichier ?

__________________________________________________________________________________________________

Améliorez votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
Commenter la réponse de cptpingu
Messages postés
75
Date d'inscription
samedi 7 juillet 2007
Statut
Membre
Dernière intervention
29 mars 2015
0
Merci
Bonjour,

Input(1, s)
met la ligne du fichier dans la variable s. J'ai remplacé par
s = fgetc(f);

et cela focntionne.

Merci beaucoup

A bientôt



#include <stdio.h>
#include <stdlib.h>


int main()
{
int Compteur;
char s = 'A';
char action;
char id_med;
char user;
char code_labo;
char open;
FILE * f;

f = fopen("c:\\etilab\\import\\CBLEtilab.ini", "r");

Compteur = -1;
while( !feof(f))
{
Compteur = Compteur + 1;
/** Input(1, s);/**< */
s = fgetc(f);
printf("%c", s);
if (Compteur = 0)
{
action = s;
}
if (Compteur = 1)
{
id_med = s;
}
if (Compteur = 2)
{
user = s;
}
if (Compteur = 3)
{
code_labo = s;
}
if (Compteur = 4)
{
open = s;
}
}


fclose (f);

return 0;
}
Commenter la réponse de cs_perles
Messages postés
75
Date d'inscription
samedi 7 juillet 2007
Statut
Membre
Dernière intervention
29 mars 2015
0
Merci
Bonjour,

J'ai un souci avec les instructions en visual basic

ChaineTravailDebut = Mid(item, 4, 4);


ChaineTravailFin = Mid(item, 8, 100);



Exemple
item contient 0133101FUSO
ChaineTravailDebut contient 3101
ChaineTravailFin contient FUSO

Comment retranscrire ces instructions en langage C

Merci

Avec mes meilleures salutations

A bientôt



#include <stdio.h>

#include <stdlib.h>

int main()
{
char num;
char nom;
char prenom;
char sexe;
char sexenum;
char naissance;
char jjnaissance;
char mmnaissance;
char aanaissance;
char adresse;
char cp;
char ville;
char pays;
char tel;
char mobile;
char email;
char Reseau;
char open;

int Compteur;
char s = 'A';
char action;

FILE * f;

f = fopen("c:\\etilab\\import\\CBLEtilab.ini", "r");

Compteur = -1;
while( !feof(f))
{
Compteur = Compteur + 1;
s = fgetc(f);
printf("%c", s);
ChaineTravailDebut = Mid(item, 4, 4);
ChaineTravailFin = Mid(item, 8, 100);
if ChaineTravailDebut = "3000"
{
num = ChaineTravailFin;
printf("%c", num);
{
if ChaineTravailDebut = "3101"
{
nom = ChaineTravailFin;
printf("%c", nom);
{
if ChaineTravailDebut = "3102"
{
prenom = ChaineTravailFin:
printf("%c", prenom);
{
if ChaineTravailDebut = "3103"
{
jjnaissance = Mid(ChaineTravailFin, 1, 2);
mmnaissance = Mid(ChaineTravailFin, 3, 2);
aanaissance = Mid(ChaineTravailFin, 5, 4);
naissance = aanaissance + mmnaissance;
naissance = naissance + jjnaissance;
{
if ChaineTravailDebut = "3106"
{
cp = Mid(ChaineTravailFin, 1, 4);
ville = Mid(ChaineTravailFin, 6, 100);
printf("%c",ville);
{
if ChaineTravailDebut = "3107"
{
adresse = ChaineTravailFin;
{
if ChaineTravailDebut = "3110"
{
sexenum = ChaineTravailFin;
If sexenum = 1
{
sexe = "H";
{
If sexenum = 2
{
sexe = "F";
{
{


fclose (f);




printf("Hello world!\n");
return 0;
}



printf("Hello world!\n");
return 0;
}
Commenter la réponse de cs_perles
Messages postés
3801
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 novembre 2019
90
0
Merci
En propre, ça donnerait ceci:
(Je considère que s est un caractère et non une chaîne de caractères)

#include <stdio.h>
#include <stdlib.h>

int main()
{
int compteur;
char s = 'A';
char action;
char id_med;
char user;
char code_labo;
char open;
FILE * f;

f = fopen("c:\\etilab\\import\\CBLEtilab.ini", "r");

compteur = -1;
while (!feof(f))
{
++compteur;
scanf("%c", &s);
switch (compteur)
{
case 0:
action = s;
break;
case 1:
id_med = s;
break;
case 2:
user = s;
break;
case 3:
code_labo = s;
break;
case 4:
open = s;
break;
default:
printf("Unknow type %i\n", compteur);
}
}
fclose (f);

return 0;
}


__________________________________________________________________________________________________

Améliorez votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
Commenter la réponse de cptpingu
Messages postés
75
Date d'inscription
samedi 7 juillet 2007
Statut
Membre
Dernière intervention
29 mars 2015
0
Merci
Bonjour,

J'ai un souci avec les instructions en visual basic



ChaineTravailDebut = Mid(item, 4, 4);1



ChaineTravailFin = Mid(item, 8, 100);1


Exemple
item contient 0133101FUSO
ChaineTravailDebut contient 3101
ChaineTravailFin contient FUSO

Comment retranscrire ces instructions en langage C

Merci

Avec mes meilleures salutations

A bientôt





#include <stdio.h>
#include <stdlib.h>

int main()
{
char num;
char nom;
char prenom;
char sexe;
char sexenum;
char naissance;
char jjnaissance;
char mmnaissance;
char aanaissance;
char adresse;
char cp;
char ville;
char pays;
char tel;
char mobile;
char email;
char Reseau;
char open;

int Compteur;
char s = 'A';
char action;

FILE * f;

f = fopen("c:\\etilab\\import\\CBLEtilab.ini", "r");

Compteur = -1;
while( !feof(f))
{
Compteur = Compteur + 1;
s = fgetc(f);
printf("%c", s);
ChaineTravailDebut = Mid(item, 4, 4);
ChaineTravailFin = Mid(item, 8, 100);
if ChaineTravailDebut = "3000"
{
num = ChaineTravailFin;
printf("%c", num);
{
if ChaineTravailDebut = "3101"
{
nom = ChaineTravailFin;
printf("%c", nom);
{
if ChaineTravailDebut = "3102"
{
prenom = ChaineTravailFin:
printf("%c", prenom);
{
if ChaineTravailDebut = "3103"
{
jjnaissance = Mid(ChaineTravailFin, 1, 2);
mmnaissance = Mid(ChaineTravailFin, 3, 2);
aanaissance = Mid(ChaineTravailFin, 5, 4);
naissance = aanaissance + mmnaissance;
naissance = naissance + jjnaissance;
{
if ChaineTravailDebut = "3106"
{
cp = Mid(ChaineTravailFin, 1, 4);
ville = Mid(ChaineTravailFin, 6, 100);
printf("%c",ville);
{
if ChaineTravailDebut = "3107"
{
adresse = ChaineTravailFin;
{
if ChaineTravailDebut = "3110"
{
sexenum = ChaineTravailFin;
If sexenum = 1
{
sexe = "H";
{
If sexenum = 2
{
sexe = "F";
{
{


fclose (f);




printf("Hello world!\n");
return 0;
}



printf("Hello world!\n");
return 0;
}
Commenter la réponse de cs_perles
Messages postés
75
Date d'inscription
samedi 7 juillet 2007
Statut
Membre
Dernière intervention
29 mars 2015
0
Merci
Bonjour,

Merci pour la réponse. Effectivement, c'est beaucoup mieux et plus lisible.

A bientôt


#include <stdio.h>

#include <stdlib.h>

int main()
{
int compteur;
char s = 'A';
char action;
char id_med;
char user;
char code_labo;
char open;
FILE * f;

f = fopen("c:\\etilab\\import\\CBLEtilab.ini", "r");

compteur = -1;
while (!feof(f))
{
++compteur;
scanf("%c", &s);
switch (compteur)
{
case 0:
action = s;
break;
case 1:
id_med = s;
break;
case 2:
user = s;
break;
case 3:
code_labo = s;
break;
case 4:
open = s;
break;
default:
printf("Unknow type %i\n", compteur);
}
}
fclose (f);

return 0;
}
Commenter la réponse de cs_perles
Messages postés
3801
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 novembre 2019
90
0
Merci
Pourrais-tu faire un effort sur la coloration syntaxique ? Clique sur "Prévisualiser" avant d'envoyer ton message. Tu verrais que la coloration n'est pas appliquée. Au lieu de mettre ton texte entouré des balises de codes, tu mets deux balises de codes vides, une avant et une après ton texte, qui lui, n'est pas "dedans". Ce qui donne un affichage complètement cassé. Je repasse derrière toi pour corriger, mais au bout de la 3ème fois, ça devient un peu lassant.

Pour ton souci:
if ChaineTravailDebut = "3000" 

Ça ne peut pas fonctionner. D'une part parce que la syntaxe veut qu'il y ait des parenthèses, d'autre part parce que le comparateur est "==" et non "=" (affectation). En plus de cela, en C, il n'y a pas de type "string". Juste des tableaux de caractères, ce qui fait que même le "==" ne peut pas fonctionner (il ne fera que comparer les adresses mémoires). Il te faut donc utiliser une fonction de comparaison de chaînes comme "strcmp" (qui te donne la différence entre deux chaînes).
Ce qui donnera:
if (strcmp(ChaineTravailDebut, "3000") == 0) 


If sexenum = 2

Voir explication ci-dessus. Ça donnerait:
if (sexenum == 2)


ChaineTravailDebut = Mid(item, 4, 4)

Il n'y a pas d'équivalent en C, aussi direct. Si tu ne maîtrises pas les pointeurs en C, ni les bases du C, il est pratiquement impossible pour toi de correctement le traduire.
Pour répondre techniquement à ta question, l'équivalent serait de la forme:
char* item = "0133101FUSO";
char* tmp = item + 3;
char ChaineTravailDebut[5] = {0};
strncpy(ChaineTravailDebut, item, 4);


sexe = "H"; 

Attention, un caractère c'est entre guillemets simples, et une chaîne entre guillemets doubles. Donc ça devrait être ici: 'H'.

__________________________________________________________________________________________________

Améliorez votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
Commenter la réponse de cptpingu
Messages postés
75
Date d'inscription
samedi 7 juillet 2007
Statut
Membre
Dernière intervention
29 mars 2015
0
Merci
Bonjour,

J'ai modifié mon code comme suit :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char* num;
    char* nom;
    char* prenom;
    char sexe;
    char sexenum;
    char naissance[8];
    char jjnaissance[2];
    char mmnaissance[2];
    char aanaissance[2];
    char* adresse;
    char* cp;
    char* ville;
    char* pays;
    char* tel;
    char* mobile;
    char* email;
    char* Reseau;
    char open;
    char* ChaineTravail;
    char* ChaineTravailDebut;
    char* ChaineTravailFin;
    char* ChaineCompare;
    int Compteur;
    char s = 'A';
    char action;

    FILE * f;

    f = fopen("c:\\etilab\\import\\CBLEtilab.ini", "r");

    Compteur = -1;
    while( !feof(f))
    {
        Compteur = Compteur + 1;
        s = fgetc(f);
        printf("%c", s);
        ChaineTravailDebut[1] = ChaineTravail[4];
        ChaineTravailDebut[2] = ChaineTravail[5];
        ChaineTravailDebut[3] = ChaineTravail[6];
        ChaineTravailDebut[4] = ChaineTravail[7];
     //*   ChaineTravailFin = s + 8;
        if (strcmp(ChaineTravailDebut, "3000") == 0)
        {
            num = ChaineTravailFin;
            printf("%c", num);
        }
    }


    fclose (f);

    return 0;
}
Commenter la réponse de cs_perles
Messages postés
3801
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 novembre 2019
90
0
Merci
Si tu veux convertir un code en C, il va falloir que tu apprennes les bases du langage (je sais c'est chiant, mais il faut y passer).
Plus tu avances, plus tu butes sur des (nouvelles) notions basiques, et ça va être comme cela tout le temps.

Dans ton code, ChaineTravail n'étant pas allouée, ça plantera immédiatemment au lancement du programme. Un char* n'est pas un "string" magique. Un "string" est une classe qui manie des "char*" en interne qui te fait plein de chose automatiquement. Il t'alloue de la place en mémoire, t'initialise celle-ci, redimensionne tout seul la taille en RAM, voir te trouve un bloc de mémoire plus grand si nécessaire. Il fait vraiment plein de choses que tu ne vois pas. Quand tu fais du C, c'est à toi de faire tout cela. C'est la raison pour laquelle il est très simple de convertir du C en un langage possédant des "string", mais l'inverse est particulièrement hardu pour quelqu'un ne maîtrisant pas ces notions difficiles.
Je t'invite à apprendre les bases du langages pour avancer plus efficacement. Là, on va juste faire du "ping pong". Tu vas me poster du code comme tu posterais du chinois, et je vais te modifier des morceaux que tu ne comprendras pas.

Voici un lien où tu pourras apprendre rapidement:
http://openclassrooms.com/courses/apprenez-a-programmer-en-c

Il te suffit de faire la partie 1 et la partie 2 pour avoir les bases. Ainsi, tu pourras pratiquement convertir ton code son mon aide.

__________________________________________________________________________________________________

Améliorez votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
Commenter la réponse de cptpingu
Messages postés
75
Date d'inscription
samedi 7 juillet 2007
Statut
Membre
Dernière intervention
29 mars 2015
0
Merci
Bonjour,

Voici ce que je devrais obtenir dans ma variable Explorer 44

Start \"C:/Program Files/Internet explorer/iexplore.exe" "https://www.proxilis.ch/directlab/link_doc.php?action=ADDPAT&user=125784b92703c&code_labo=0&id_med=9997&num=508&nom=FUSO&prenom=HELENE&sexe=F&naissance=19101010&adresse=Ernest-Ansermet 38&ville=GENEVE&pays=Suisse&open=1

J'ai un souci au début , j'ai Start "C:/Program Files/Internet

Merci de votre aide

A bientôt





#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <string.h>

char *cat(char *s1, const char *s2)
{
  char *s = s1;

  for (; *s1; ++s1);
  for (; *s2; *s1++ = *s2++);
  return s;
}

int main()
{
    char * Explorer0;
    char * Explorer1;
    char * Explorer2;
    char * Explorer3;
    char * Explorer4;
    char * Explorer5;
    char * Explorer6;
    char * Explorer7;
    char * Explorer8;
    char * Explorer9;
    char * Explorer20;
    char * Explorer21;
    char * Explorer22;
    char * Explorer23;
    char * Explorer24;
    char * Explorer25;
    char * Explorer26;
    char * Explorer27;
    char * Explorer28;
    char * Explorer29;
    char * Explorer30;
    char * Explorer31;
    char * Explorer32;
    char * Explorer33;
    char * Explorer34;
    char * Explorer35;
    char * Explorer36;
    char * Explorer37;
    char * Explorer38;
    char * Explorer39;
    char * Explorer40;
    char * Explorer41;
    char * Explorer42;
    char * Explorer43;
    char * Explorer44;
    char * Explorer45;

    char * Explorer100;
    char * Explorer101;
    char * action;
    char * user;
    char * code_labo;
    char * id_med;
    char * num;
    char * nom;
    char * prenom;
    char * sexe;
    char * naissance;
    char * adresse;
    char * cp;
    char * ville;
    char * pays;
    char * open;
	char s1[100] = "num=";
	char s2[100] = "nom=";
	char s3[100] = "prenom=";
	char s4[100] = "sexe=";
	char s5[100] = "naissance=";
	char s6[100] = "adresse=";
	char s7[100] = "cp=";
	char s8[100] = "ville=";
	char s9[100] = "pays=";

	char s20[100] = "https://www.proxilis.ch/directlab/link_doc.php?";


    Explorer100 = "&";
    Explorer101 = "&";
    action      = "action=ADDPAT";
    user        = "user=125784b92703c";
    code_labo   = "code_labo=0";
    id_med      = "id_med=9997";

    num         = "508";
    nom         = "FUSO";
    prenom      = "HELENE";
    sexe        = "F";
    naissance   = "03021939";
    adresse     = "Ernest-Ansermet 38";
    cp          = "1205";
    ville       = "GENEVE";
    pays        = "Suisse";
    open        = "open=1";

    Explorer1   = cat(s1, num);
    Explorer2   = cat(s2, nom);
    Explorer3   = cat(s3, prenom);
    Explorer4   = cat(s4, sexe);
    Explorer5   = cat(s5, naissance);
    Explorer6   = cat(s6, adresse);
    Explorer7   = cat(s7, cp);
    Explorer8   = cat(s8, ville);
    Explorer9   = cat(s9, pays);

    Explorer0 = "https://www.proxilis.ch/directlab/link_doc.php?";
    Explorer20 = cat(s20,Explorer100);
    Explorer21 = cat(Explorer20,user);
    Explorer22 = cat(Explorer21,Explorer100);
    Explorer23 = cat(Explorer22,code_labo);
    Explorer24 = cat(Explorer23,Explorer100);
	Explorer25 = cat(Explorer24,id_med);
    Explorer26 = cat(Explorer25,Explorer100);
    Explorer27 = cat(Explorer26,Explorer1);
    Explorer28 = cat(Explorer27,Explorer100);
    Explorer29 = cat(Explorer28,Explorer2);
    Explorer30 = cat(Explorer29,Explorer100);
    Explorer31 = cat(Explorer30,Explorer3);
    Explorer32 = cat(Explorer31,Explorer100);
    Explorer33 = cat(Explorer32,Explorer4);
    Explorer34 = cat(Explorer33,Explorer100);
    Explorer35 = cat(Explorer34,Explorer5);
    Explorer36 = cat(Explorer35,Explorer100);
    Explorer37 = cat(Explorer36,Explorer6);
    Explorer38 = cat(Explorer37,Explorer100);
    Explorer39 = cat(Explorer38,Explorer8);
    Explorer40 = cat(Explorer39,Explorer100);
    Explorer41 = cat(Explorer40,Explorer9);
    Explorer42 = cat(Explorer41,Explorer100);
    Explorer43 = cat(Explorer42,open);

    char s22[500] = "start \"C:/Program Files/Internet Explorer/iexplore.exe\"";
//*	Explorer44 = cat(s22, "https://www.proxilis.ch");
	Explorer44 = cat(s22, Explorer43);
	system(Explorer44);

    return 0;
}

<code>
Commenter la réponse de cs_perles