Transcription Basic en C

cs_perles Messages postés 74 Date d'inscription samedi 7 juillet 2007 Statut Membre Dernière intervention 29 mars 2015 - Modifié par BunoCS le 11/03/2015 à 12:53
cs_perles Messages postés 74 Date d'inscription samedi 7 juillet 2007 Statut Membre Dernière intervention 29 mars 2015 - 16 mars 2015 à 00:17
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

12 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
11 mars 2015 à 12:56
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
0
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
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
Modifié par cptpingu le 11/03/2015 à 19:13
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
0
cs_perles Messages postés 74 Date d'inscription samedi 7 juillet 2007 Statut Membre Dernière intervention 29 mars 2015
Modifié par cptpingu le 12/03/2015 à 10:36
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;
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_perles Messages postés 74 Date d'inscription samedi 7 juillet 2007 Statut Membre Dernière intervention 29 mars 2015
12 mars 2015 à 10:10
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;
}
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
Modifié par cptpingu le 12/03/2015 à 10:41
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
0
cs_perles Messages postés 74 Date d'inscription samedi 7 juillet 2007 Statut Membre Dernière intervention 29 mars 2015
13 mars 2015 à 09:54
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;
}
0
cs_perles Messages postés 74 Date d'inscription samedi 7 juillet 2007 Statut Membre Dernière intervention 29 mars 2015
13 mars 2015 à 09:58
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;
}

                
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
Modifié par cptpingu le 13/03/2015 à 13:41
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
0
cs_perles Messages postés 74 Date d'inscription samedi 7 juillet 2007 Statut Membre Dernière intervention 29 mars 2015
13 mars 2015 à 23:55
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;
}
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
14 mars 2015 à 00:19
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
0
cs_perles Messages postés 74 Date d'inscription samedi 7 juillet 2007 Statut Membre Dernière intervention 29 mars 2015
16 mars 2015 à 00:17
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>
0
Rejoignez-nous