Quel langage pour ce genre de travail?

Bazinga

Membre actif
15 Mai 2008
716
37
42
Salut à tous.

Je me lance dans la programmation sous Mac et me fixe comme premier objectif d'analyser un grand fichier texte ( des coordonnées GPS) pour en faire une analyse, des moyennes, des calculs de vitesse entre points, etc...

Le but serait donc d'ouvrir un fichier en texte, faire un parsing des infos, et ensuite quelques boucles sur ses chiffres, les ranger dans des tableux et reproduire un second fichier texte.

Comme je n'ai jamais franchi le pas sous Mac ( cela me prendrait une petite soirée à le faire sous Windows avec C++) je me demandais par quoi commencer et compte beaucoup sur votre avis.

Je pensais une petite interface COCOA ou je glisserais mon fichier texte à l'intérieur, aurais 4 ou 5 boutons à côté avec les opérations à faire avec ce fichier.

Pensez vous que c'est une bonne idée de me lancer là dedans ou voyez-vous directement un meilleur langage/script permettant de le faire?

Merci pour vos conseils!


Profete
 
Un programme en C et en ligne de commande suffit largement pour ce genre d'application. Et si tu sais le faire sous Windows, tu sais aussi le faire sous mac puisque bien sûr tu as utilisé un langage normalisé :rateau:

Mais si tu tiens absolument à faire une interface, tu n'auras pas de mal à apprendre l'Obj-C, Cocoa c'est autre chose mais avec les exemples d'Apple tu devrais y arriver.
Pour ce qui est des langages script, Perl ferait aussi l'affaire, mais aussi un bête sed/awk.
 
tu peux faire un bin en C puis t'amuser a faire un front Coca qui appelerait l'exe avec des options si ce n'est que pour faire du drag and drop puis creer le nouveau fichier pour un exemple http://code.google.com/p/archimade/ n'est qu un front-end pour en autre l 'exe /usr/bin/tar.

Generalement meme avec les NSScanner et autre facilité le parse et la transformation en object est couteuse mais rien ne t'empeche d'ecrire des routines C puis d'ecrire un obj-C wrapper si les perfs ne sont pas au rendez vous, enfin si tu veux faire une vraie appli avec une tableview afin de rendre les data human readable, tant que tu fais du GIS et relaté tu peux me demander :D j'aime bien ca.
 
Ton problème a deux aspects:

Décorticage du texte
J'écrirais ça en Python, parce que c'est un langage qui se prête très bien au traitement des fichiers texte, bien mieux que le C. Oui Python est lent par rapport à un programme en C, et alors ? Il faut quand même être réaliste, le même programme écrit en Python sera beaucoup plus court, plus clair et facile à mettre au point. Et puis, c'est important ou pas pour toi, mais le code est portable sous Windows.
Tu peux aussi regarder du côté de Perl, j'aime moins la syntaxe, mais au niveau du traitement du texte, ça vaut Python.
Comme l'écris Tatouille, tu pourrais l'écrire en Objective-C + Cocoa et utiliser la classe NSScanner, mais ObjC n'est pas très adapté à ce genre de choses.


Interface utilisateur
Tu as en gros 3 options:
- un script AppleScript pour lancer ton programme en ligne de commande.
- programmer Cocoa avec Python (je te le déconseille, mais faisable) si tu veux tout écrire en Python.
- Objective-C + Cocoa qui lance ton programme en ligne de commande. C'est la solution que je te recommande, mais évidemment, ça t'impose d'apprendre encore les bases d'un nouveau langage.
 
Ok, merci à tous pour vos précieuses infos.

Je vais vite le faire en C avant pour avoir une idée et des ce w-end, je me lance dans la prog sous Mac ( python par exemple)

Encore merci et à bientôt.
 
Et bien voilà!

Je viens d'apprendre les bases du Python en 2 heures, et c'est effectivement jouissif de simplicité.

Par contre, mon code doit-être horrible et il doit y avoir moyen de faire mieux non?

Je suis à l'écoute de vos conseils pour améliorer cette horreur que j'ai bidouillée:

Bloc de code:
obFichier = open("Final.txt",'r') 
TexteBrut = obFichier.read()
obFichier.close()
TexteBrut=TexteBrut.split('coordinates')
TexteBrut=TexteBrut[1]
TexteBrut=TexteBrut[1:]
TexteBrut=TexteBrut[:len(TexteBrut)-2]
Triplet=TexteBrut.split()
i=0
Lat=[]
Lon=[]
Alt=[]
while i<len(Triplet):
    Groupe=Triplet[i].split(',')
    Lat.append(Groupe[0])
    Lon.append(Groupe[1])
    Alt.append(Groupe[2])
    i=i+1

Le fichier à découper est en piece jointe!