LEFT OUTER JOIN foireux? [Oracle8i] - SQL/NoSQL - Programmation
Marsh Posté le 18-07-2005 à 14:08:57
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 :
|
Marsh Posté le 18-07-2005 à 15:53:09
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
Marsh Posté le 18-07-2005 à 15:57:32
eraser17 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.
Marsh Posté le 18-07-2005 à 15:59:26
j'ai modifié en
Code :
|
mais y a tjr un truc qui cloche
Marsh Posté le 18-07-2005 à 16:01:30
Elmoricq a écrit : 1. Le cast est inutile ; |
comme ça alors?
Code :
|
Marsh Posté le 18-07-2005 à 16:10:20
Code :
|
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.
Marsh Posté le 18-07-2005 à 16:27:42
tu fais même pas la base que je t'ai montré. te plains pas.
Marsh Posté le 18-07-2005 à 16:29:32
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?
Marsh Posté le 18-07-2005 à 16:34:33
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().
Marsh Posté le 18-07-2005 à 16:36:59
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
Marsh Posté le 18-07-2005 à 16:47:29
effectivement y avait une erreur de chargement d'un fichier txt
Marsh Posté le 18-07-2005 à 19:04:04
ça doit etre ça
enfin je continuerais demain, quand je me suis cassé ça marchait a peu près mais visiblement il prenait mal les chaine de caract
Marsh Posté le 18-07-2005 à 19:10:01
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 :
|
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 :
|
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]
Marsh Posté le 18-07-2005 à 19:15:49
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
Marsh Posté le 18-07-2005 à 19:30:37
bon écoute tu fais ça :
Code :
|
Marsh Posté le 18-07-2005 à 19:32:30
k j'essayerais ça, merci
Marsh Posté le 18-07-2005 à 19:37:05
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
Marsh Posté le 18-07-2005 à 22:14:49
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
et ce sont pas des int, ce sont des char
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.
Marsh Posté le 18-07-2005 à 22:27:58
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.
Marsh Posté le 18-07-2005 à 22:39:26
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.
Marsh Posté le 18-07-2005 à 22:45:09
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
Marsh Posté le 18-07-2005 à 22:48:07
mais d'après ce qu'on m'a dit, rien que pour ouvrir un des fichier il faut minimum 30 minutes.
Marsh Posté le 18-07-2005 à 22:50:33
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
Marsh Posté le 18-07-2005 à 22:51:22
c'est un stage dans quelle PME mitée ton truc ? t'es en quoi ? Première année de fac ?
Marsh Posté le 18-07-2005 à 22:53:18
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
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.
Marsh Posté le 18-07-2005 à 22:57:14
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
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
Marsh Posté le 18-07-2005 à 22:57:54
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
Marsh Posté le 18-07-2005 à 22:59:25
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.
Marsh Posté le 18-07-2005 à 23:03:18
je vois qu'on est d'accord
Marsh Posté le 18-07-2005 à 23:04:53
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. |
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
Marsh Posté le 18-07-2005 à 23:07:02
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
Marsh Posté le 18-07-2005 à 23:11:24
ReplyMarsh Posté le 18-07-2005 à 23:11:45
Elmoricq a écrit : Aïe. |
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.
Marsh Posté le 18-07-2005 à 23:12:11
Taz a écrit : vite et mal, on bien vu |
minute, ça fait que 2 jours que je fais du C
Marsh Posté le 18-07-2005 à 12:39:31
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 . 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?
heu c'est a peu près tout pour l'instant, merci.
Message édité par eraser17 le 11-08-2005 à 15:55:20