#include <stdlib.h> #include <stdio.h> // Utilisé pour lire le n° de ligne int readInt(FILE* fp, int *ret) { int i; char sBuffer[32]; // on ne lira pas plus 8 caractères for (i=0;i<8;i++) { sBuffer[i] = fgetc(fp); if (sBuffer[i]==32) // On est tombé sur l'espace qui suit le N° { sBuffer[i] = 0; *ret = strtol(sBuffer, NULL, 0); return 0; } } *ret = 0; return -1; } // Permet de lire la valeur double stockée à la ligne désignée, dans le fichier désigné double LireDegree(int nLineNumber, char* sFileName) { // On ne lira pas de montant de plus de 32 caractères char sBuffer[32]; FILE* fp; int i=0; if (fp = fopen(sFileName, "r")) { // On se place sur la ligne désirée while(--nLineNumber) while (!feof(fp) && fgetc(fp)!=10); // On ne tiens pas compte de la premiere valeur de la ligne while (fgetc(fp)!=32); while(!feof(fp)) { // Et on stocke la donnée, caractère par caractère sBuffer[i] = fgetc(fp); // En stoppant dès que l'on trouve un espace ou un saut de ligne après la valeur if (i && sBuffer[i]==32 || sBuffer[i]==13) break; // Et en supprimant tout espace avant la donnée if (sBuffer[i]!=32) i++; } sBuffer[i] = 0; fclose(fp); return strtod(sBuffer, NULL); } return 0.0; } int main() { char sBuffer[32]; // Longeur max supposée d'un nom de fichier FILE *fp, *fp_final; int nLineNumber, i; double nCurDegree, nMinDegree = 0.0; int bFirst=1; int bBreak = 0; fp = fopen("resultat.txt", "r"); fp_final = fopen("resultat_final.txt", "w"); // On lit le numéro de ligne a considérer while (!readInt(fp, &nLineNumber)) { fprintf(fp_final, "%d :", nLineNumber); fgetc(fp); // on lit les deux points séparateurs i=0; while(!feof(fp)) { // On lit le reste, caractère par caractère sBuffer[i]=fgetc(fp); if (sBuffer[0]==10) // la dernière ligne du fichier est une ligne vide... on sort break; // fin de ligne, ou espace délimitant deux noms de fichier... else if (feof(fp) || sBuffer[i]==10 || sBuffer[i]==32 && i!=0) { // était on a une fin de ligne, ou a un espace ? bBreak = (sBuffer[i]==10); sBuffer[i] = 0; fprintf(fp_final, " %s", sBuffer); // On ajoute ".txt" au nom obtenu sBuffer[i++] = '.'; sBuffer[i++] = 't'; sBuffer[i++] = 'x'; sBuffer[i++] = 't'; sBuffer[i] = '\0'; // On lit la valeur située a la ligne voulue dans le fichier désigné nCurDegree = LireDegree(nLineNumber, sBuffer); // On stocke la valeur minimale lue if (nMinDegree>nCurDegree || bFirst) { bFirst = 0; nMinDegree = nCurDegree; } i=0; if (bBreak) break; } else if (sBuffer[0]!=32) i++; // le caractère lu fait partie du nom de fichier. On avance le curseur pour lire le caractère suivant } fprintf(fp_final, " : %f\n", nMinDegree); bFirst = 1; } fclose(fp); fclose(fp_final); // affiche le résultat system("type resultat_final.txt"); system("pause"); }
// on ne lira pas plus 8 caractères for (i=0;i<8;i++) {
8 ? c'est arbitraire... si tu veux mettre 15 ou 255 a ta guise...
j'ignore quelles sont les contranites que tu as.
On lit le fichier ligne par ligne, en stockant le n° de la ligne a considérer dans les fichiers cibles.
on lit ensuite chaque fichier (aaa cdd cc....)
on passe à la ligne souhaitée, on extraies le degree
dans la boucle traitant chaque fichier, on ne garde que le degree min lu.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionPrivate Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim cnx As ADODB.Connection Dim rst As ADODB.Recordset cnx = New ADODB.Connection rst = New ADODB.Recordset cnx.ConnectionString = "DRIVER={MySQL ODBC 3.51 Driver};" & "SERVER=127.0.0.1;" & "DATABASE=base_donnee;" & "UID=root;" & "PWD=;" cnx.Open() rst.Open("show tables", cnx) While Not (rst.EOF) ComboBox1.Items.Add(rst.Fields(0).Value) rst.MoveNext() End While rst.Close() End Sub
c:\ch\ch\Form1.Designer.vb(80) : error BC30002: Type 'ADOB.Connection' non défini.
c:\ch\ch\Form1.Designer.vb(81) : error BC30002: Type 'ADODB.Recordset' non défini.
c:\ch\ch\Form1.Designer.vb(82) : error BC30002: Type 'ADODB.Connection' non défini.
c:\ch\ch\Form1.Designer.vb(83) : error BC30002: Type 'ADODB.Recordset' non défini.
<lattice numberobj="4" numberatt="4" numbercpt="16">
<galicia_document> <lattice numberobj="4" numberatt="4" numbercpt="16"> <name>lattice(ctx_0)</name> <object>3</object> <object>2</object> <object>1</object> <object>4</object> d b c a <concept> 1 <extent> <object_ref>3</object_ref> <object_ref>2</object_ref> <object_ref>1</object_ref> <object_ref>4</object_ref> </extent> </concept> <concept> 16 <extent> <object_ref>2</object_ref> <object_ref>1</object_ref> <object_ref>4</object_ref> </extent> d <concept_ref>1</concept_ref> </concept> <concept> 2 <extent> <object_ref>3</object_ref> <object_ref>2</object_ref> <object_ref>1</object_ref> </extent> a <concept_ref>1</concept_ref> </concept> <concept> 8 <extent> <object_ref>3</object_ref> <object_ref>2</object_ref> <object_ref>4</object_ref> </extent> c <concept_ref>1</concept_ref> </concept> <concept> 4 <extent> <object_ref>3</object_ref> <object_ref>1</object_ref> <object_ref>4</object_ref> </extent> b <concept_ref>1</concept_ref> </concept> <concept> 14 <extent> <object_ref>1</object_ref> <object_ref>4</object_ref> </extent> d b <concept_ref>16</concept_ref> <concept_ref>4</concept_ref> </concept> <concept> 15 <extent> <object_ref>2</object_ref> <object_ref>1</object_ref> </extent> d a <concept_ref>16</concept_ref> <concept_ref>2</concept_ref> </concept> <concept> 6 <extent> <object_ref>3</object_ref> <object_ref>4</object_ref> </extent> b c <concept_ref>8</concept_ref> <concept_ref>4</concept_ref> </concept> <concept> 3 <extent> <object_ref>3</object_ref> <object_ref>1</object_ref> </extent> b a <concept_ref>2</concept_ref> <concept_ref>4</concept_ref> </concept> <concept> 13 <extent> <object_ref>2</object_ref> <object_ref>4</object_ref> </extent> d c <concept_ref>16</concept_ref> <concept_ref>8</concept_ref> </concept> <concept> 7 <extent> <object_ref>3</object_ref> <object_ref>2</object_ref> </extent> c a <concept_ref>2</concept_ref> <concept_ref>8</concept_ref> </concept> <concept> 10 <extent> <object_ref>2</object_ref> </extent> d c a <concept_ref>15</concept_ref> <concept_ref>13</concept_ref> <concept_ref>7</concept_ref> </concept> <concept> 11 <extent> <object_ref>1</object_ref> </extent> d b a <concept_ref>14</concept_ref> <concept_ref>15</concept_ref> <concept_ref>3</concept_ref> </concept> <concept> 5 <extent> <object_ref>3</object_ref> </extent> b c a <concept_ref>6</concept_ref> <concept_ref>3</concept_ref> <concept_ref>7</concept_ref> </concept> <concept> 12 <extent> <object_ref>4</object_ref> </extent> d b c <concept_ref>14</concept_ref> <concept_ref>6</concept_ref> <concept_ref>13</concept_ref> </concept> <concept> 9 <extent> </extent> d b c a <concept_ref>10</concept_ref> <concept_ref>11</concept_ref> <concept_ref>5</concept_ref> <concept_ref>12</concept_ref> </concept> </lattice> </galicia_document>
void startElement(void *user_data, const xmlChar *name, const xmlChar **attrs){ int i; // Si on est sur un Lattice... if (!xmlStrcmp(name, (xmlChar*)"Lattice") && attrs) { // On parcoure les attributs for (i = 0; attrs[i]; i+=2) { // Jusqu'à trouver l'atribut numberCpt if (!xmlStrcmp(attrs[i], (xmlChar*)"numberCpt")) { // Que l'on mémorise (strtol permet d'analyser la valeur texte, pour en faire une valeur numérique) _countCpt = strtol((const char*)attrs[i+1],NULL,0); ...
printf("%d\n",_countCpt);
printf("le nbre des concepts : %d\n",_countCpt);
le nbre des concepts : 0
le nbre des concepts : 16
<lattice numberobj="4" numberatt="4" numbercpt="16">
Le nombre d'objet : 4
Le nombre d'attribut : 4
Le nombre de concept : 16
lire_fichier("treillis.lat.xml"); printf("le nbre des concepts : %d\n",_countCpt);
void startElement(void *user_data, const xmlChar *name, const xmlChar **attrs){ int i; // Si on est sur un Lattice... if (!xmlStrcmp(name, (xmlChar*)"Lattice") && attrs) { // On parcoure les attributs for (i = 0; attrs[i]; i+=2) { // Jusqu'à trouver l'atribut numberCpt if (!xmlStrcmp(attrs[i], (xmlChar*)"numberCpt")) { // Que l'on mémorise (strtol permet d'analyser la valeur texte, pour en faire une valeur numérique) _countCpt = strtol((const char*)attrs[i+1],NULL,0); // on alloue un tableau qui va contenir les concepts. _concepts = (CONCEPT*)calloc(_countCpt, sizeof(CONCEPT)); break; // inutile de considérer les attributs suivants } } }
_countCpt = strtol((const char*)attrs[i+1],NULL,0);
_countObj = strtol((const char*)attrs[i+1],NULL,0);
_countAtt = strtol((const char*)attrs[i+1],NULL,0);
// Si on est sur un Lattice... if (!xmlStrcmp(name, (xmlChar*)"Lattice") && attrs) { // On parcoure les attributs for (i = 0; attrs[i]; i+=2) { // Jusqu'à trouver l'atribut numberCpt if (!xmlStrcmp(attrs[i], (xmlChar*)"numberCpt")) {
int _countObj = 0; int _countAtt = 0; void startElement(void *user_data, const xmlChar *name, const xmlChar **attrs){ int i; // Si on est sur un Lattice... if (!xmlStrcmp(name, (xmlChar*)"Lattice") && attrs) { // On parcoure les attributs for (i = 0; attrs[i]; i+=2) { // Jusqu'à trouver l'atribut numberCpt if (!xmlStrcmp(attrs[i], (xmlChar*)"numberCpt")) { // Que l'on mémorise (strtol permet d'analyser la valeur texte, pour en faire une valeur numérique) _countCpt = strtol((const char*)attrs[i+1],NULL,0); _countObj = strtol((const char*)attrs[i+1],NULL,0); _countAtt = strtol((const char*)attrs[i+1],NULL,0); // on alloue un tableau qui va contenir les concepts. _concepts = (CONCEPT*)calloc(_countCpt, sizeof(CONCEPT)); break; // inutile de considérer les attributs suivants } } } else if (!xmlStrcmp(name, (xmlChar*)"Concept") && _countCpt) _currentCpt++; else if (!xmlStrcmp(name, (xmlChar*)"Concept_Ref") && _countCpt) _inUpperCovers = 1; else if (!xmlStrcmp(name, (xmlChar*)"Attribute_Ref")) _inIntent = 1; else if (!xmlStrcmp(name, (xmlChar*)"Object_Ref")) _inExtent = 1; else if (!xmlStrcmp(name, (xmlChar*)"ID")) _inID = 1; }
if (!xmlStrcmp(attrs[i], (xmlChar*)"numberCpt")) { // Que l'on mémorise (strtol permet d'analyser la valeur texte, pour en faire une valeur numérique) _countCpt = strtol((const char*)attrs[i+1],NULL,0); _countObj = strtol((const char*)attrs[i+1],NULL,0); _countAtt = strtol((const char*)attrs[i+1],NULL,0);