/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Filåbning, variabelt filnavn
Fra : Mette Dencker


Dato : 19-02-04 17:32

Hej NG

Jeg har flg. problem:
Jeg har lavet et program til åbning af en fil, og det fungerer upåklageligt,
når jeg blot i selve koden specificerer hvilken fil, jeg vil åbne og læse.
Meeeen, det er jo ikke særlig kønt og slet ikke effektivt, når programmet
skal køres på mange filer, så jeg vil gerne specificere filnavnet i
kommandolinien, når jeg kompilerer! Den kodestump, der indlæser filen, er
følgende:

input_file_pointer = fopen(filename, "r");

og filename er en string (array af chars, selvfølgelig). Jeg kører alt over
unix og kompilerer med gcc med følgende kommando (der jo altså ikke dur) -
jeg vil gerne åbne filen brown.txt, som selvfølgelig ligger i samme
directory som mit program, ovenstående stump er fra:

gcc -o readfile readfile.c brown.txt

dette giver følgende fejl:

ld: fatal: file brown.txt: unknown file type
ld: fatal: File processing errors. No output written to readfile

Er der nogen, der har en god idé til hvordan jeg løser dette? Egentlig er
det jo såre simpelt, har jeg på fornemmeren

Skriv endelig, hvis ovenstående beskrivelse ikke er fyldestgørende nok!

På forhånd tak
/Mette


---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.592 / Virus Database: 375 - Release Date: 18-02-04



 
 
Mogens Hansen (19-02-2004)
Kommentar
Fra : Mogens Hansen


Dato : 19-02-04 18:16


"Mette Dencker" <mdjo01@ist.auc.dk> wrote:

[8<8<8<]
> gcc -o readfile readfile.c brown.txt

Du prøver at få compileren til at oversætte både din program kildetekst og
din datafil.

Hvis det var et fortolket sprog (f.eks. Python) ville det være rigtigt at
give både programmet kildetekst og programmets argumenter til fortolkeren:
py readfile.py brown.txt

[8<8<8<]
> Er der nogen, der har en god idé til hvordan jeg løser dette? Egentlig er
> det jo såre simpelt, har jeg på fornemmeren

Jeps, det skulle være til at løse.

Du prøver at lave 2 trin samtidig:
1. Byg programmet (oversæt og link)
2. Kør programmet

1.
Du oversætter programmet med gcc:
gcc readfile.c -o readfile

2.
Kør programmet:
../readfile brown.txt

Venlig hilsen

Mogens hansen



Bertel Brander (19-02-2004)
Kommentar
Fra : Bertel Brander


Dato : 19-02-04 20:21

Mogens Hansen wrote:
> "Mette Dencker" <mdjo01@ist.auc.dk> wrote:
>
> [8<8<8<]
>
>>gcc -o readfile readfile.c brown.txt
>
>
> Du prøver at få compileren til at oversætte både din program kildetekst og
> din datafil.
>
> Hvis det var et fortolket sprog (f.eks. Python) ville det være rigtigt at
> give både programmet kildetekst og programmets argumenter til fortolkeren:
> py readfile.py brown.txt
>
> [8<8<8<]
>
>>Er der nogen, der har en god idé til hvordan jeg løser dette? Egentlig er
>>det jo såre simpelt, har jeg på fornemmeren
>
>
> Jeps, det skulle være til at løse.
>
> Du prøver at lave 2 trin samtidig:
> 1. Byg programmet (oversæt og link)
> 2. Kør programmet
>
> 1.
> Du oversætter programmet med gcc:
> gcc readfile.c -o readfile
>
> 2.
> Kør programmet:
> ./readfile brown.txt
>
Det forudsætter vist at man laver noget i stil med:

int main(int argc, char *argv[])
{
FILE *input_file_pointer;
if(argc == 2)
input_file_pointer = fopen(argv[1], "r");
...
}

/b


Byrial Jensen (19-02-2004)
Kommentar
Fra : Byrial Jensen


Dato : 19-02-04 20:51

Mette Dencker wrote:
> Hej NG
>
> Jeg har flg. problem:
> Jeg har lavet et program til åbning af en fil, og det fungerer upåklageligt,
> når jeg blot i selve koden specificerer hvilken fil, jeg vil åbne og læse.
> Meeeen, det er jo ikke særlig kønt og slet ikke effektivt, når programmet
> skal køres på mange filer, så jeg vil gerne specificere filnavnet i
> kommandolinien, når jeg kompilerer!

Det undrer mig at du vil specificere filnavnet når du oversætter, for
det betyder at du skal oversætte programmet lige så mange gange som du
skal bruge det med forskellige filnavne. Men noget sådant gøres normalt
ved at definere navnet som en makro på gcc's kommandolinje:

$ gcc -o readfile readfile.c '-DFILENAME="brown.txt"'

I programmet bruger du makroen på samme måde som hvis den var defineret
med et #define-direktiv:

FILE *input_file_pointer = fopen(FILENAME, "r");

Du kan evt. i starten af c-filen tjekke om du om har husket at definere
makroen på oversættekommandolinjen med:

#ifndef FILENAME
#error FILENAME macro not defined
#endif

> Er der nogen, der har en god idé til hvordan jeg løser dette? Egentlig er
> det jo såre simpelt, har jeg på fornemmeren

Var det ikke smartede at angive filnavnet på det oversatte programs
kommandilinje, så du kun behøver én udgave af det oversatte program?


Mette Dencker (19-02-2004)
Kommentar
Fra : Mette Dencker


Dato : 19-02-04 21:14

Mange tak for hjælpen - nu spiller det max!
/M

"Mette Dencker" <mdjo01@ist.auc.dk> skrev i en meddelelse
news:c12ok4$10m$1@sunsite.dk...
> Hej NG
>
> Jeg har flg. problem:
> Jeg har lavet et program til åbning af en fil, og det fungerer
upåklageligt,
> når jeg blot i selve koden specificerer hvilken fil, jeg vil åbne og læse.
> Meeeen, det er jo ikke særlig kønt og slet ikke effektivt, når programmet
> skal køres på mange filer, så jeg vil gerne specificere filnavnet i
> kommandolinien, når jeg kompilerer! Den kodestump, der indlæser filen, er
> følgende:
>
> input_file_pointer = fopen(filename, "r");
>
> og filename er en string (array af chars, selvfølgelig). Jeg kører alt
over
> unix og kompilerer med gcc med følgende kommando (der jo altså ikke dur) -
> jeg vil gerne åbne filen brown.txt, som selvfølgelig ligger i samme
> directory som mit program, ovenstående stump er fra:
>
> gcc -o readfile readfile.c brown.txt
>
> dette giver følgende fejl:
>
> ld: fatal: file brown.txt: unknown file type
> ld: fatal: File processing errors. No output written to readfile
>
> Er der nogen, der har en god idé til hvordan jeg løser dette? Egentlig er
> det jo såre simpelt, har jeg på fornemmeren
>
> Skriv endelig, hvis ovenstående beskrivelse ikke er fyldestgørende nok!
>
> På forhånd tak
> /Mette
>
>
> ---
> Outgoing mail is certified Virus Free.
> Checked by AVG anti-virus system (http://www.grisoft.com).
> Version: 6.0.592 / Virus Database: 375 - Release Date: 18-02-04
>
>


---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.592 / Virus Database: 375 - Release Date: 18-02-04



Søg
Reklame
Statistik
Spørgsmål : 177549
Tips : 31968
Nyheder : 719565
Indlæg : 6408820
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste