récupération de données grâce à un programme C - C - Programmation
Marsh Posté le 22-01-2008 à 12:02:47
Si tu as le choix, préfère un langage comme PERL plutôt que le C pour ce genre de tâche, ça te prendra beaucoup moins de temps à coder surtout si tu n'es pas à l'aise avec ce langage.
En PERL ça s'écrit en une vingtaine de lignes de code, et l'exécution de ce genre de tâche se fait très rapidement.
Si tu n'as pas le choix de la technologie, alors il te faudra passer par les fonctions fgets() pour la lecture, et pour la recherche dans la chaîne + extraction des champs : strchr, strtok et consors.
Marsh Posté le 22-01-2008 à 12:21:01
merci beaucoup, mais je ne connais rien non plus au PERL, peux tu me donner des pistes pour ce programme?
Marsh Posté le 22-01-2008 à 14:04:24
Ce n'est pas très difficile en PERL.
Comme ça très très rapidement, non vérifié, à la va-vite en pas propre, et en assumant que la structure est toujours telle que tu nous l'as donnée, t'as un truc dans le genre :
Code : |
Y a surement des erreurs qui trainent je n'ai pas trop le temps de vérifier, zieute la documentation du langage ici en cas de souci (ou pose des questions si tu ne comprends pas) : http://perldoc.perl.org
Marsh Posté le 22-01-2008 à 15:43:13
romainr a écrit : Auriez vous une solution simple à proposer pour automatiser tout ce rapatriement? |
Pour ce qui est du C, on a pas rien à proposer. C'est à toi de spécifier correctement ton besoin, de concevoir la solution, d'écrire ton code et de le soumettre pour commentaires, corrections et/ou améliorations. Si tu ne connais pas le C, on ne peut pas grand chose pour toi... Si tu ne connais ni l'algorithmie ni la programmation, encore moins...
Il y a des livres, des sites, des tutoriels, et même des professionnels pour se former...
Marsh Posté le 23-01-2008 à 20:01:11
Code :
|
A appeler en boucle dans un script pour passer les 3000 fichiers à la moulinette et en dirigeant la sortie standard vers le fichier CSV à produire.
Sous réserve que les fichiers soient constitués de blocs identiques à celui montré...
Il est bien évident que le C n'est pas le plus indiqué pour ce genre de choses...
Marsh Posté le 23-01-2008 à 20:26:04
Code :
|
Pour pas return ?
À ce propos, il en manque un à la fin de main().
Code :
|
Surement pas.
En effet, que se passe-t-il si fgets() échoue à cause d'une erreur de lecture, et pas parce qu'une fin de fichier a été rencontrée ?
Ou bien si la dernière ligne se termine par EOF au lieu de '\n' ?
Ce qu'il faut tester ici, c'est le code retour de fgets(). Ensuite seulement, si tu le souhaites, tu peux gérer la raison pour laquelle fgets() a retourné NULL, en testant avec feof() ou ferror().
Marsh Posté le 24-01-2008 à 10:01:59
Elmoricq a écrit :
|
Merci pour ces conseils
Comme tu l'as compris, c'est fait "Comme ça très très rapidement, non vérifié, à la va-vite en pas propre, et en assumant que la structure est toujours telle [qu'il] nous l'as donnée".
L'absence de return est anecdotique (le retour par defaut est 0). La remarque sur fgets est tout à fait juste. D'ailleurs tiens, tant qu'on y est, l'utilisation de perror() est pas terrible non plus, il vaut mieux mettre perror(argv[1]) c'est beaucoup plus parlant.
Ca marche dans le cas nominal, après si il veut en faire un beau programme C tout propre, il a déjà une base
Marsh Posté le 27-01-2008 à 15:14:57
Merci pour vos réponses!
On a réussi à faire notre petit programme.
Si ça vous intéresse je peux le poster!
Marsh Posté le 22-01-2008 à 12:00:07
Bonjour à tous
Je suis actuellement en projet de telecom et dans celui ci je dois traiter des données.
Ces données sont dans des fichiers .txt d'environ 160 000 lignes et il y a environ 3000 fichiers.
exemple d'un bout de fichier à traiter:
point (2.636000, 4.400000, 1.000000) <--------------------------------------------------------- il faut récupérer les 3 coordonnées du point
167
temps=80.385688 <--------------------------------------------------------- il faut récupérer ce nombre
att=-94.330984 <--------------------------------------------------------- il faut récupérer ce nombre
phase=0.879672
angle_arrive_az=27.378480
angle_arrive_el=0.000000
Il faut récupérer toutes les données d'un fichier et ce dans 3000 fichiers.(Dans un fichier il y a environ 100 points, temps et att à récupérer.)
Nous voulons donc récupérer toutes ces données dans un fichier txt sous la forme de 3 colonnes donnant: coordonnées du point le temps l'atténuation
Auriez vous une solution simple à proposer pour automatiser tout ce rapatriement?
En effet la programmation n'est pas notre domaine et nous manquons de connaisances pour réaliser ce genre de programme.
Merci
romain