Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1490 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Oracle8i] LEFT OUTER JOIN foireux?

 


 Mot :   Pseudo :  
 
 Page :   1  2  3
Page Précédente
Auteur Sujet :

[Oracle8i] LEFT OUTER JOIN foireux?

n°1152439
eraser17
Posté le 18-07-2005 à 12:39:31  profilanswer
 

Voir page 2
 
----------------------------
 
 
 
 
voila j'ai plusieurs fichiers textes que je dois transformer en tableau pour pouvoir les manipuler avec un code en C avant d'en refaire un fichier texte que je reprend sous excell (c'est just epour une question de rapidité d'execution, le tableau faisant dans les 200*60000 enfin si vous avez une idée pour que ça soit rapide directement en vba c'est pas mal non plus).
 
donc le txt contient une serie de nombre et de lettre, que je passe sous la forme de caractere dans un tableau.
 
je dois declarer un truc du genre  
 
char c[j][i][k];
 
premier probleme, pour faire l'allocation dynamique de ce truc [:totoz]. la methode avec les multi pointeur est obligatoire ou il y a un truc plus simple?
 
deuxio, pour passer du txt au tableau j'utilise cet algo, ça vous semble a peu près propre ou tout a fait merdique?
 

Code :
  1. while(!feof(data))
  2.     {
  3.         i=0;
  4.                      
  5.         do
  6.         {
  7.             k=0;
  8.            
  9.             do
  10.             {
  11.                 c=fgetc(data);
  12.                
  13.                 if (!feof(data))
  14.                
  15.                      {
  16.                      strcpy(i[j][i][k],c);
  17.                      k++;
  18.                      }
  19.                    
  20.             } while ((c != '\t') && (c != '\n') && !feof(data));
  21.            
  22.             i++;
  23.            
  24.         } while ((c != '\n') && !feof(data));
  25.        
  26.         j++;
  27.     }


 
heu c'est a peu près tout pour l'instant, merci.


Message édité par eraser17 le 11-08-2005 à 15:55:20
mood
Publicité
Posté le 18-07-2005 à 12:39:31  profilanswer
 

n°1152490
Taz
bisounours-codeur
Posté le 18-07-2005 à 14:08:57  profilanswer
 

code pourri.
 
Mauvaise utilisation de feof.
Ne compile même pas (mauvais argument à strcpy).
Ne parlons pas de i[j][i][k]...
 
Ton corps de programme ça doit être
 

Code :
  1. int c;
  2. while((c = fgetc(fichier)) != EOF))
  3. {
  4.   // ici l'arithmétique pour trouver les valeurs de i, j et k
  5.  
  6.   donnees[i][j][k] = c;
  7. }

n°1152512
eraser17
Posté le 18-07-2005 à 14:28:37  profilanswer
 

merci, c bien ce que je pensais [:joce]

n°1152653
eraser17
Posté le 18-07-2005 à 15:53:09  profilanswer
 

quand je tente d'initialiser et que je fous ça
 
char ** a = (char*)malloc(R * C * sizeof *a );
 
il me repond ça
 
cannot convert `char*' to `char**' in initialization  
 
pourtant avec des int* ça fonctionnait [:gratgrat]

n°1152662
eraser17
Posté le 18-07-2005 à 15:56:34  profilanswer
 

ah ok c bon, ça se lance mais ça plante :o
 
mais ça se lance :o

n°1152664
Elmoricq
Modérateur
Posté le 18-07-2005 à 15:57:32  profilanswer
 

eraser17 a écrit :


char ** a = (char*)malloc(R * C * sizeof *a );
 


 
 
1. Le cast est inutile ;
 
2. Tu forces le retour de malloc() à "char *", pour le stocker dans "a" qui est un... "char **". Normal que le compilateur râle.

n°1152667
eraser17
Posté le 18-07-2005 à 15:59:26  profilanswer
 

j'ai modifié en  
 

Code :
  1. char ** a = (char**)malloc(R * C * sizeof *a );
  2.    
  3.         for(i = 0; i < C * R; i++)
  4.         {
  5.               a[i] = malloc(K * sizeof *(a[i]));
  6.         };


 
mais y a tjr un truc qui cloche :/

n°1152669
eraser17
Posté le 18-07-2005 à 16:01:30  profilanswer
 

Elmoricq a écrit :

1. Le cast est inutile ;
 
2. Tu forces le retour de malloc() à "char *", pour le stocker dans "a" qui est un... "char **". Normal que le compilateur râle.


 
 
comme ça alors?
 

Code :
  1. char ** a = malloc(R * C * sizeof *a );
  2.    
  3.         for(i = 0; i < C * R; i++)
  4.         {
  5.               a[i] = malloc(K * sizeof *(a[i]));
  6.         };

n°1152687
eraser17
Posté le 18-07-2005 à 16:10:20  profilanswer
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define R 2000       //number of row
  4. #define C 100        //number of column
  5. #define K 20         //number of character
  6. int main(int argc, char *argv[])
  7. {
  8.    
  9.     int i,j,k;
  10.     char c;
  11.    
  12.     i=0;
  13.     j=0;
  14.     k=0;
  15.    
  16.     FILE *data;
  17.     FILE *txt;
  18.    
  19.     txt=fopen("txt.txt","w" );
  20.     data=fopen("Engine_History_Tst_Prod.txt","r" );
  21.    
  22.     //allocation of the memory
  23.    
  24.     char ** a = malloc(R * C * sizeof *a );
  25.    
  26.         for(i = 0; i < C * R; i++)
  27.         {
  28.               a[i] = malloc(K * sizeof *(a[i]));
  29.         };
  30.        
  31.     i=0;
  32.        
  33.    
  34.     fflush(stdout);
  35.     while((c = fgetc(data)) != EOF)
  36.         {
  37.               if (c == '\t')
  38.               {
  39.                j++;
  40.                k=0;
  41.               };
  42.              
  43.               if (c == '\n')       
  44.               {
  45.                i++;
  46.                j=0;
  47.                k=0;
  48.               };
  49.            
  50.              a[i * R + j][k] = c ;
  51.            
  52.              k++;
  53.            
  54.         };
  55.   fclose(data);
  56.   fclose(txt);     
  57.  
  58.   system("PAUSE" );
  59.   return 0;
  60. }

     
 
 
j'ai une erreur de type "memoire ne peut etre read". et a mon avis ça se passe au niveau du fgetc mais j'arrive pas a fixer le prob. si qqn voit l'erreur a la con que j'ai du faire.


Message édité par eraser17 le 18-07-2005 à 16:20:06
n°1152706
Taz
bisounours-codeur
Posté le 18-07-2005 à 16:27:42  profilanswer
 

tu fais même pas la base que je t'ai montré. te plains pas.

mood
Publicité
Posté le 18-07-2005 à 16:27:42  profilanswer
 

n°1152709
eraser17
Posté le 18-07-2005 à 16:29:32  profilanswer
 

Taz a écrit :

tu fais même pas la base que je t'ai montré. te plains pas.


 
ben si :??:
 
enfin j'ai pas très bien compris ce que tu voulais dire par calcul arithmetique, je suis quand meme obligé de faire comme ça vu que je connais pas exactement le nombre de colonne et le nombre de caractere des données dans chaque case.
 
ou alors y a un truc que j'ai pas saisi?

n°1152714
Elmoricq
Modérateur
Posté le 18-07-2005 à 16:34:33  profilanswer
 

J'ai le sentiment que tu te compliques la vie pour pas grand chose.
 
Ton programme est peu lisible, ce qui va te jouer des tours à terme.
 
Tu devrais simplifier le problème et le mettre à plat avant de te lancer dans le code.
 
Autre chose : toujours tester le code retour des fonctions appelées. Par exemple, que se passe-t'il si fopen() échoue ? Ou si malloc() ne réussit pas à allouer la mémoire voulue ?
Ah, et à chaque malloc() doit correspondre un free().


Message édité par Elmoricq le 18-07-2005 à 16:37:03
n°1152720
eraser17
Posté le 18-07-2005 à 16:36:59  profilanswer
 

ouai je pense aussi mais je vois pas comment faire d'autre, les données sont vraiment aleatoire, en plus parfois la colonne est vide donc faut un truc qui s'adapte.
 
mais effectivement doit y avoir un moyen plus simple vu que j'avais fait un truc similaire y a 2 ans et que ça m'avait semblé moins compliqué. mais je me souvient plus comment j'avais fait :o

n°1152730
eraser17
Posté le 18-07-2005 à 16:47:29  profilanswer
 

effectivement y avait une erreur de chargement d'un fichier txt [:joce]

n°1152777
Taz
bisounours-codeur
Posté le 18-07-2005 à 17:25:03  profilanswer
 

ben non, t'as du pâté dans les yeux.

n°1152871
eraser17
Posté le 18-07-2005 à 19:04:04  profilanswer
 

ça doit etre ça :o
 
enfin je continuerais demain, quand je me suis cassé ça marchait a peu près mais visiblement il prenait mal les chaine de caract :o


---------------
Mon appli de réalité augmentée sur Android -- et sur iPhone/iPad-- Mes VTT en 650B - 584mm..
n°1152877
Sve@r
Posté le 18-07-2005 à 19:10:01  profilanswer
 

Si tu veux allouer dynamiquement un tableau à 3 dimensions, il te faut allouer la première, puis pour chaque occurrence de la première allouer la seconde puis pour chaque occurrence de la seconde il te faut allouer la 3°
Un peu comme ça

Code :
  1. char ***tab;
  2. tab=(char ***)malloc(nb_lig * sizeof(char**));
  3. for (i=0; i < nb_lig; i++)
  4. {
  5.     tab[i]=(char**)malloc(nb_col * sizeof(char*));
  6.     for (j=0; j < nb_col; j++)
  7.     {
  8.         tab[i][j]=(char*)malloc(nb_car * sizeof(char));
  9.     }
  10. }


 
En plus, comme l'a dit Elmorick, faut que tu testes chaque malloc et que tu décides quoi faire si ça plante
Enfin, en fin d'utilisation, il te faut désallouer le tableau de la même façon (tu peux déléguer ça à une fonction particulière que tu appelleras aussi si le malloc plante), du style
 

Code :
  1. void free_tab(char ***tab, size_t nb_lig, size_t nb_col)
  2. {
  3.     size_t i, j;
  4.     if (tab)
  5.     {
  6.         for (i=0; i < nb_lig; i++)
  7.         {
  8.             if (tab[i])
  9.             {
  10.                 for (j=0; j < nb_col; j++)
  11.                 {
  12.                     if (tab[i][j])
  13.                        free(tab[i][j])
  14.                 }
  15.                 free(tab[i]);
  16.             }
  17.         }
  18.         free(tab);
  19.     }
  20. }


 
Comme tu peux le voir, cela devient vite bien chiant. Surtout que ça sert à rien de faire de l'allocation dynamique quand les tailles sont figées => char tab[x][y][z]
       


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1152882
eraser17
Posté le 18-07-2005 à 19:15:49  profilanswer
 

ben ouai mais vu que les taille ici sont tab[60000][200][20] ça plante quand je fais pas d'allocation dynamique :/
 
et le truc que j'ai fait sa émule en quelque sorte une 3 dim en un tableau 2 dim mais c vrai que c du chipotage.
 
merci pour les bouts de codes :jap:


---------------
Mon appli de réalité augmentée sur Android -- et sur iPhone/iPad-- Mes VTT en 650B - 584mm..
n°1152894
Taz
bisounours-codeur
Posté le 18-07-2005 à 19:30:37  profilanswer
 

bon écoute tu fais ça :
 

Code :
  1. struct BigArray
  2. {
  3.   int array[60000][200][20];
  4. };
  5. ...
  6. struct BigArray *ba = malloc(sizeof *ba);
  7. ba->array[x][y][z] = 42;
  8. free(ba);


 
 

n°1152897
eraser17
Posté le 18-07-2005 à 19:32:30  profilanswer
 
n°1152899
Taz
bisounours-codeur
Posté le 18-07-2005 à 19:37:05  profilanswer
 

En fait j'espère que int array[60000][200][20] c'est une blague, parce que tu n'as pas l'air de réaliser combien ça fait en gigaoctet

n°1153089
eraser17
Posté le 18-07-2005 à 22:14:49  profilanswer
 

Taz a écrit :

En fait j'espère que int array[60000][200][20] c'est une blague, parce que tu n'as pas l'air de réaliser combien ça fait en gigaoctet


 
 
ouai c vrai qu'une fois le calcul fait [:figti]
 
et ce sont pas des int, ce sont des char :o
 
mais c justemment pour ça que je le fais en C, sous excel le traitement de fichiers de cette taille prend des heures et ils faudrait diminuer ça.
 
mais je vais essayer de voir s'il n'y a pas moyen de diviser ça en fichier de 10000 lignes.


---------------
Mon appli de réalité augmentée sur Android -- et sur iPhone/iPad-- Mes VTT en 650B - 584mm..
n°1153109
Elmoricq
Modérateur
Posté le 18-07-2005 à 22:27:58  profilanswer
 

C'est quoi la structure de ton fichier ?
 
Parce qu'à mon avis, doit y avoir moyen de faire ça autrement. Avant de coder, faut concevoir. ;)

n°1153129
eraser17
Posté le 18-07-2005 à 22:39:26  profilanswer
 

en gros c'est :
 
numerodeserie   date  test   idle  xxxx  xxxxx
jsld5546465     18/04/07 7:13 rated 4564 848645
jkjsjiojkll     19/01/04 8:17 passed 4568 1231535
 
sur une centaine de colonne et un nombre de ligne pouvant aller jusqu'a la fin d'une feuille excell. entre chaque colone y a un '\t' et a la fin de chaque ligne un '\n'
 
y a 4 fichier txt different et il faut faire diverse operations pour reunir les info de ces 4 fichier en un seul que je reprend ensuite dans excel.
 
donc j'ai pensé prendre les 4 fichiers textes, les convertir en tableau et ensuite bosser sur les tableau pour composer le tableau final que je retransforme en texte. ce qui sera surement plus rapide que les meme operations realisée directement sous excell en vba.


---------------
Mon appli de réalité augmentée sur Android -- et sur iPhone/iPad-- Mes VTT en 650B - 584mm..
n°1153132
Taz
bisounours-codeur
Posté le 18-07-2005 à 22:41:09  profilanswer
 

mais ils font combien de Mo tes fichiers excel ?

n°1153141
eraser17
Posté le 18-07-2005 à 22:45:09  profilanswer
 

ben celui sur lequel je travail comme exemple en fait seulement 80 mais sinon les complet je sais pas, j'en ai pas encore vu [:joce]


---------------
Mon appli de réalité augmentée sur Android -- et sur iPhone/iPad-- Mes VTT en 650B - 584mm..
n°1153147
eraser17
Posté le 18-07-2005 à 22:48:07  profilanswer
 

mais d'après ce qu'on m'a dit, rien que pour ouvrir un des fichier il faut minimum 30 minutes.


---------------
Mon appli de réalité augmentée sur Android -- et sur iPhone/iPad-- Mes VTT en 650B - 584mm..
n°1153150
Taz
bisounours-codeur
Posté le 18-07-2005 à 22:50:33  profilanswer
 

ben z'êtes con de faire ça dans des fiches excel. Il faut une base de données, une vrai (pas Access). La quantité d'informations est telle, qu'il te faut un vrai système pour gérer ça, et ensuite utiliser des algorithmes qui permettent de travailler sans avoir toutes les données en mémoire. Un SGBD avec un langage comme SQL permet de faire ça tranquillement

n°1153151
Taz
bisounours-codeur
Posté le 18-07-2005 à 22:51:22  profilanswer
 

c'est un stage dans quelle PME mitée ton truc ? t'es en quoi ? Première année de fac ?


Message édité par Taz le 18-07-2005 à 22:51:47
n°1153156
eraser17
Posté le 18-07-2005 à 22:53:18  profilanswer
 

et hooooo, moi je suis la que depuis 2 semaines, je suis en stage, en plus je suis pas programmeur ni informaticien, je suis mécanicien. on m'a bombardé analyste-programmeur après que j'ai fais 2-3 macro excell et maintenant j'essaye d'arranger tous leur outils d'analyse de donnée pour en faire des trucs potables :o
 
en plus a la base ils prennent leur donnée dans une base oracle avant de refoutre ça sur excell. je veux bien essayer de court circuiter excel mais je sais pas comment ça marche oracle.


---------------
Mon appli de réalité augmentée sur Android -- et sur iPhone/iPad-- Mes VTT en 650B - 584mm..
n°1153161
eraser17
Posté le 18-07-2005 à 22:57:14  profilanswer
 

Taz a écrit :

c'est un stage dans quelle PME mitée ton truc ? t'es en quoi ? Première année de fac ?


 
c'est un stage dans la boite qui detient 75% du marché des moteur diesel en europe [:joce]
 
ouai moi aussi ça m'a surpris de voir l'état de leur prog info. avant que j'arrive ça faisait 3 ans qu'ils faisait 4h de manipulation dans des fichiers excel pour obtenir des graph alors qu'avec une conne macro ça prend maintenant 30 sec [:dawa]


---------------
Mon appli de réalité augmentée sur Android -- et sur iPhone/iPad-- Mes VTT en 650B - 584mm..
n°1153163
Elmoricq
Modérateur
Posté le 18-07-2005 à 22:57:54  profilanswer
 

eraser17 a écrit :

et hooooo, moi je suis la que depuis 2 semaines, je suis en stage, en plus je suis pas programmeur ni informaticien, je suis mécanicien.


 
Aïe.
Imagine un informaticien à qui on demande de se lancer dans la mécanique, alors qu'il n'en a jamais fait avant.
Voilà ta situation, mais c'est également la notre : ça ne va pas être facile de t'expliquer comment faire.
 
 

eraser17 a écrit :

en plus a la base ils prennent leur donnée dans une base oracle avant de refoutre ça sur excell. je veux bien essayer de court circuiter excel mais je sais pas comment ça marche oracle.


 
J'imagine qu'il doit y avoir une bibliothèque pour faire ça en C.
Autrement, si le langage ne t'est pas imposé, alors il doit y avoir moyen de faire ça plus simplement dans d'autres langages.
 
 
EDIT : orthographe  :o


Message édité par Elmoricq le 18-07-2005 à 23:01:08
n°1153167
Taz
bisounours-codeur
Posté le 18-07-2005 à 22:59:25  profilanswer
 

ben t'arriveras jamais à rien ... ça te viendrait pas à l'idée de demander à un informaticien de faire de la mécanique.
 
Déjà que tu rames pas possible pour un pauvre morceau de C (d'ailleurs, pourquoi t'as choisi le C), tu n'as aucune notion sur la gestion de la mémoire ce qui est essentiel quand on manipule des gros jeux de données. Excel est pas adapté du tout, tu le constates. Bascule vers un langage de script et travail directement avec leur BDD. Ou mieux, trouve quelqu'un de qualifié pour faire ça.

n°1153172
eraser17
Posté le 18-07-2005 à 23:03:18  profilanswer
 
n°1153176
eraser17
Posté le 18-07-2005 à 23:04:53  profilanswer
 

Taz a écrit :

ben t'arriveras jamais à rien ... ça te viendrait pas à l'idée de demander à un informaticien de faire de la mécanique.
 
Déjà que tu rames pas possible pour un pauvre morceau de C (d'ailleurs, pourquoi t'as choisi le C), tu n'as aucune notion sur la gestion de la mémoire ce qui est essentiel quand on manipule des gros jeux de données. Excel est pas adapté du tout, tu le constates. Bascule vers un langage de script et travail directement avec leur BDD. Ou mieux, trouve quelqu'un de qualifié pour faire ça.


 
 
ben j'ai choisi le C parceque c'est le seul language évolué que je connaissait a peu près. mais je l'utilise pour des simulations de systeme mécanqiue moi, par pour gerer et travailler sur watmille données.
 
je vais essayé de voir ce qu'y a moyen de faire directement sur oracle. ça doit pas etre si compliqué que ça :o


---------------
Mon appli de réalité augmentée sur Android -- et sur iPhone/iPad-- Mes VTT en 650B - 584mm..
n°1153180
eraser17
Posté le 18-07-2005 à 23:07:02  profilanswer
 

y a quoi comme language pour faire ça? sacahnt qu'en genral j'apprend assez vite mais qu'il faut pas me taper de l'assembleur non plus :o


---------------
Mon appli de réalité augmentée sur Android -- et sur iPhone/iPad-- Mes VTT en 650B - 584mm..
n°1153185
Taz
bisounours-codeur
Posté le 18-07-2005 à 23:10:50  profilanswer
 

moi je dirais un truc de script genre python

n°1153186
Taz
bisounours-codeur
Posté le 18-07-2005 à 23:11:24  profilanswer
 

eraser17 a écrit :

sacahnt qu'en genral j'apprend assez vite


vite et mal, on bien vu  :whistle:

n°1153187
eraser17
Posté le 18-07-2005 à 23:11:45  profilanswer
 

Elmoricq a écrit :

Aïe.
Imagine un informaticien à qui on demande de se lancer dans la mécanique, alors qu'il n'en a jamais fait avant.
Voilà ta situation, mais c'est également la notre : ça ne va pas être facile de t'expliquer comment faire.


 
d'un autre coté je suis pas non plus totalement noob en info, ça fait quand meme une bonne dizaine d'année que j'en fait, c'est juste que j'ai jamais travaillé sur des masses de données pareille et je sais pas trop bien comment m'y prendre.


---------------
Mon appli de réalité augmentée sur Android -- et sur iPhone/iPad-- Mes VTT en 650B - 584mm..
n°1153188
eraser17
Posté le 18-07-2005 à 23:12:11  profilanswer
 

Taz a écrit :

vite et mal, on bien vu  :whistle:


 
minute, ça fait que 2 jours que je fais du C [:joce]


---------------
Mon appli de réalité augmentée sur Android -- et sur iPhone/iPad-- Mes VTT en 650B - 584mm..
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Oracle8i] LEFT OUTER JOIN foireux?

 

Sujets relatifs
bloc en % float leftouter join qui renvoie un résultat deux fois
[resolu] div contenant d'autres div dont float:left;Left Join et maximum
IE ne prend pas mon margin-left CSS[SQL] transformé une sous requete en requete avec LEFT join
php-GD iprob saturation de palette imagecoloralocate ?? 
Plus de sujets relatifs à : [Oracle8i] LEFT OUTER JOIN foireux?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR