Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 15/04/2011, à 18:21

Levi59

[C] Débutant: Afficher le contenu d'un fichier texte (multi OS)

Avant toute chose, sachez que je ne programme en C que depuis 3 semaines donc je suis un véritable débutant! ^^

Je suis étudiant et dans le cadre d'un stage à la fac, je dois programmer une application en console et en langage C pour effectuer des calculs d'équilibre liquide-vapeur et comme je ne sais pas créer des graphiques en console et que de toute manière les données doivent pouvoir être reprise ensuite, je stocke ces données dans des fichiers txt que je copie colle ensuite dans un tableur. Je travaille sous Debian, mon maitre de stage sous Mac et la plupart des autres profs sous Win...

J'aimerais que mon script lance automatiquement l'éditeur de texte par défaut de l'os mais je ne sais pas comment faire ni même si c'est possible donc mes questions sont :
Peut on lancer d'une commande l'éditeur de texte par défaut d'un OS en langage C?
Y'a-t-il sur tous les OS une commande universelle pour lancer un éditeur de texte?
Quels sont ces commandes? Win -> C:\windows\system32\notepad.exe mais pour les autres(gedit, kate, mousepad ...)?
Comment désigner la bonne commande en fonction du système?

PS:
J'ai également une autre question moins importante concernant la compilation sous mac en console:
quelle commande pour compiler ceci: main.c, fonctions.c et fonctions.h
Je travaille sous code::block et la compilation est transparente mais je sais qu'il me faut utiliser l'option -lm pour les exponentiel et logarithme.
Je n'ai jamais utilisé Mac de ma vie, c'est uniquement pour que mon tuteur puisse suivre mon travail sans que j'ai forcement à utiliser mon propre PC

D'avance Merci.

Hors ligne

#2 Le 15/04/2011, à 23:05

Pylades

Re : [C] Débutant: Afficher le contenu d'un fichier texte (multi OS)

Salut,

Levi59 a écrit :

[…]
J'aimerais que mon script lance automatiquement l'éditeur de texte par défaut de l'os mais je ne sais pas comment faire ni même si c'est possible donc mes questions sont :

Je crois que c'est ça ton problème. T'es vraiment obligé de faire comme ça ?


Levi59 a écrit :

Peut on lancer d'une commande l'éditeur de texte par défaut d'un OS en langage C?

Sur les unixoïdes modernes (donc Mac OS X compris, je pense), tu peux faire execl("/bin/nano", "arg");, mais je ne pense pas que ça se comporte comme tu l'espère…


Levi59 a écrit :

Y'a-t-il sur tous les OS une commande universelle pour lancer un éditeur de texte?

Non.


Levi59 a écrit :

Quels sont ces commandes? Win -> C:\windows\system32\notepad.exe mais pour les autres(gedit, kate, mousepad ...)?

/usr/bin/gedit, /usr/bin/kate, mais si tu veux faire tous les éditeurs de texte du monde, t'es pas sorti des ronces…


Levi59 a écrit :

Comment désigner la bonne commande en fonction du système?

Avec la compilation conditionnelle (utiliser le préprocesseur pour ne faire compiler qu'une certaine portion de code) c'est possible, mais je ne pense pas que ce soit une bonne idée…


Vraiment, essaie de revoir ton organisation.


Levi59 a écrit :

PS:
J'ai également une autre question moins importante concernant la compilation sous mac en console:
quelle commande pour compiler ceci: main.c, fonctions.c et fonctions.h
Je travaille sous code::block et la compilation est transparente mais je sais qu'il me faut utiliser l'option -lm pour les exponentiel et logarithme.
Je n'ai jamais utilisé Mac de ma vie, c'est uniquement pour que mon tuteur puisse suivre mon travail sans que j'ai forcement à utiliser mon propre PC

D'avance Merci.

gcc -std={ton standard, probablment c89} -pedantic -Wall -Wextra -O2 -c main.c
gcc -std={ton standard, probablment c89} -pedantic -Wall -Wextra -O2 -c fonctions.c
gcc -s {les bibliothèques à lier, ici -lm} main.o fonctions.o -o prog

Mais je te conseille de regarder du côté de Make
http://www.gnu.org/software/make/manual/make.html

À titre indicatif, voici mon makefile de base :

CC=gcc
MAIN_CFLAGS=-std=c89 -pedantic -Wall -Wextra -Winit-self -Wfloat-equal -Wstrict-prototypes -Wold-style-definition -Wredundant-decls -Wwrite-strings -Wcast-qual -Wconversion -Wformat=2
DEBUG_CFLAGS=-g -O0 -Wpadded -Wunreachable-code
RELEASE_CFLAGS=-O2
MAIN_LDFLAGS=
DEBUG_LDFLAGS=
RELEASE_LDFLAGS=-s
EXEC=helloworld
VERSION=0.1
TARBALL=$(EXEC)-$(VERSION).tar.gz
SRC=main.c hello.c
OBJ=$(SRC:.c=.o)

ifdef DEBUG
CFLAGS=$(DEBUG_CFLAGS) $(MAIN_CFLAGS)
LDFLAGS=$(DEBUG_LDFLAGS) $(MAIN_LDFLAGS)
else
CFLAGS=$(RELEASE_CFLAGS) $(MAIN_CFLAGS)
LDFLAGS=$(RELEASE_LDFLAGS) $(MAIN_LDFLAGS)
endif


all: $(EXEC)

$(EXEC): $(OBJ)

main.o: main.h

hello.o: hello.h

.PHONY: all clean mrproper dist

clean:
    @rm -f *.o

mrproper: clean
    @rm -f $(EXEC) $(TARBALL)

dist:
    @echo 'Creating dist tarball…'
    @rm -f $(TARBALL)
    @mkdir $(EXEC)-$(VERSION)
    @cp *.c *.h Makefile Doxyfile README COPYING $(EXEC)-$(VERSION)
    @tar zcf $(TARBALL) $(EXEC)-$(VERSION)
    @rm -r $(EXEC)-$(VERSION)
    @echo 'Done.'

Dernière modification par Pylade (Le 15/04/2011, à 23:07)


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#3 Le 16/04/2011, à 01:36

Levi59

Re : [C] Débutant: Afficher le contenu d'un fichier texte (multi OS)

D'abord, merci beaucoup pour ton aide!

Alors brièvement (il est un peu tard ^^), est-ce que c'est obligatoire? non. En fait ce serait juste pour faciliter l'usage du logiciel, une sorte de bonus. Une fois le fichier créé, il est ouvert dans l'editeur de base, près à être copié-collé.
Maintenant si il n'y a pas de méthode standardisée, j'avais pensé à une façon d'interroger le système pour savoir comment gérer le fichier. En gros simuler l'effet d'une demande d'ouverture du fichier txt et laisser le système faire le reste.(Sous win c'est explorer.exe qui gère ça non?)
Je ne sais pas si c'est assez clair...

Pour ce qui est de make, je n'ai jamais utilisé mais je vais y jeter un œil dès que j'aurais un temps mort.

Hors ligne

#4 Le 16/04/2011, à 01:49

J5012

Re : [C] Débutant: Afficher le contenu d'un fichier texte (multi OS)

le plus simple n'est pas d'essayer de lancer un texteur par defaut, mais de demander d'ouvrir directement le fichier en question dans une console/shell ... au pire il te faudra tester l'os mais tu n'auras pas a deviner quel logiciel texte utiliser, l'os le devinera tout seul !

Hors ligne

#5 Le 16/04/2011, à 02:17

Pylades

Re : [C] Débutant: Afficher le contenu d'un fichier texte (multi OS)

Levi59 a écrit :

D'abord, merci beaucoup pour ton aide!

De rien. wink


Levi59 a écrit :

Alors brièvement (il est un peu tard ^^), est-ce que c'est obligatoire? non. En fait ce serait juste pour faciliter l'usage du logiciel, une sorte de bonus.

Ouais, mais ça il vaut mieux éviter en général. Ça apporte plus de soucis qu'autre chose.


Levi59 a écrit :

Une fois le fichier créé, il est ouvert dans l'editeur de base, près à être copié-collé.

En revanche, tu peux écrire directement ton résultat dans le presse-papier, si tu veux. Et c'est possible pour une multitude d'OS, au moins par compilation conditionnelle. Je ne sais pas comment faire en détail, mais on peut regarder dans le code de Vim. big_smile

Il faut juste bien documenter ce comportement, ou mieux que ça soit demandé explicitement par l'utilisateur, pour ne pas faire de mauvaises surprises aux utilisateurs.


Levi59 a écrit :

Maintenant si il n'y a pas de méthode standardisée, j'avais pensé à une façon d'interroger le système pour savoir comment gérer le fichier. En gros simuler l'effet d'une demande d'ouverture du fichier txt et laisser le système faire le reste.(Sous win c'est explorer.exe qui gère ça non?)
Je ne sais pas si c'est assez clair...

Ouais. Alors ça, c'est vraiment le truc le plus non standardisé qui existe. Chaque système, et même dans une moindre mesure change gestionnaire de fichiers fait ce qu'il veut.

Sur un système compliant FreeDesktop.org, comme Ubuntu/Gnome par exemple, il y a toujours moyen de se débrouiller, mais aux prix d'efforts assez importants et avec un résultat pas toujours garanti. Donc faut oublier…


Levi59 a écrit :

Pour ce qui est de make, je n'ai jamais utilisé mais je vais y jeter un œil dès que j'aurais un temps mort.

Make, c'est vraiment bien. Quand tu le maîtrise à peu près, tu n'as plus besoin d'IDE, tu codes directement avec ton éditeur préféré, et là t'es efficace. big_smile


Bon apprentissage ! wink


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#6 Le 16/04/2011, à 10:25

Levi59

Re : [C] Débutant: Afficher le contenu d'un fichier texte (multi OS)

Je vois. Si la procédure serait trop lourde et complexe alors oublions car je n'aurais pas le temps de tout coder. Maintenant l'idée du presse papier est intéressante puisqu'elle serait plus simple à mettre en œuvre il me semble. Je vais me documenter la dessus, je suis sûr que je trouverais pas mal d'infos.

Merci pour ces encouragement!

Hors ligne

#7 Le 16/04/2011, à 11:09

lann

Re : [C] Débutant: Afficher le contenu d'un fichier texte (multi OS)

Pour les données à utiliser pour un tableur, je crée un fichier csv.
Donc créer le fichier avec l'extension csv
C'est un fichier texte, séparé au choix par une virgule, point virgule, tabulation au choix
Chaque donnée séparé par cet indicateur représente une cellule dans le tableur
Une fois le fichier créé, l'ouvrir avec le tableur.
OpenOffice, LibreOffice le fait très bien.
Ensuite avec le tableur, on peut faire les graphiques que l'ont veut.

ça te permettra de gagner l'opération copier/coller smile

Hors ligne