Avatar billede skeleton Nybegynder
29. oktober 2003 - 00:10 Der er 13 kommentarer og
1 løsning

en fil som variabel.

Hej

er der nogen der kan fortælle mig hvordan jeg
kalder en fil i mit c program.
Ex. mitprogram.exe %minfil%

kalder man så filen %1 inde i sit program ligesom i bat scripts????
det er ikke sikker filen har samme navn hvergang programmet køres.
Avatar billede bertelbrander Novice
29. oktober 2003 - 00:19 #1
#include <stdio.h>

int main(int argc, char *argv[])
{
  int i;
  printf("Program navn: %s\n", argv[0]);
  for(i = 1; i < argc; i++)
    printf("Argument[%d]: %s\n", i, argv[i]);
  return 0;
}
Avatar billede bertelbrander Novice
29. oktober 2003 - 00:20 #2
Der er ikke forskel på filnavne og andre argumenter/parametre.
Første parameter hedder således argv[1].
Avatar billede skeleton Nybegynder
29. oktober 2003 - 00:20 #3
okay tester det lige.
Avatar billede bertelbrander Novice
29. oktober 2003 - 00:21 #4
Man kan kalde programmet med:

mitprogram c:\whatever\whatever.jpg

argv[1] vil så være: "c:\whatever\whatever.jpg"
Avatar billede bertelbrander Novice
29. oktober 2003 - 00:29 #5
På nogle kompilere (gcc) vil resultatet af:

myprogram *

være at alle filer i mappen kommer med som argument, og

myprogram @myfile.txt

være at hver linie i myfile.txt bliver til et argument
Avatar billede skeleton Nybegynder
29. oktober 2003 - 00:32 #6
hvis ens program nu skal søge efter ord i @myfile.txt
og udplukke data og gemme dem i en db.
vil det så være smart at indlæse hver linie som argument, eller kan dette gøres på en anden måske smartere måde????
Avatar billede bertelbrander Novice
29. oktober 2003 - 00:37 #7
Normalt vil jeg fraråde at bruge @myfile.txt fordi det ikke virker på alle compilere.

I C vil man kunne læse hele filen vha:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  char line[1024];
  FILE *f;
  if(argc != 2)
  {
    fprintf(stderr, "Du skal angive et filnavn\n");
    return EXIT_FAILURE;
  }
  f = fopen(argv[1], "rt");
  while(fgets(line, sizeof(line), f))
    printf("%s", line);

  fclose(f);

  return 0;
}
Avatar billede bertelbrander Novice
29. oktober 2003 - 00:38 #8
Du kan så gøre hvad der er påkrævet for hver linie i while-loopen.
Avatar billede skeleton Nybegynder
29. oktober 2003 - 01:08 #9
du har lavet en EXIT_FAILURE; genererer den er fejlmeddelse eller exitter den bare???

til fopen bruger du "rt" kan det passe at det er read only og ?????

vil du forklare hvordan while fungere. "så lang tid der er en linie"??????

hvor kommer indholdet af hver linie ind i %2 henne?????
Avatar billede skeleton Nybegynder
29. oktober 2003 - 01:11 #10
Avatar billede bertelbrander Novice
29. oktober 2003 - 01:19 #11
EXIT_FAILURE er en besked til den der har kaldt programmet at der gik et eller andet galt (return 0 i slutningen burde nok være EXIT_SUCCESS, som indikation på at alt gik godt).

"rt" betyder at filen åbnes i read-mode (dvs man kan ikke skrive til filen) og at den åbnes i text mode.

fgets(...) returnerer 0/NULL (dvs falsk/false) når den ikke kan læse mere (f.ex fordi den er kommet til slutningen af filen). Så while-loopen kører sålænge fgets kan læse fra filen.

Hvis du angiver to filnavne som argumenter til programmet vil det andet filnavn være argv[2].
Avatar billede skeleton Nybegynder
30. oktober 2003 - 17:11 #12
Jeg har fået det til at funke, og siger mange tak for hjælpen.

smid lige et svar så jeg kan lukke spg.

Det kunne jo være der kom et spg i den nærmeste fremtid på www.exp.dk
så på gensyn.
Avatar billede bertelbrander Novice
30. oktober 2003 - 20:05 #13
Jeg forsøger at undgå point.
Avatar billede skeleton Nybegynder
30. oktober 2003 - 20:48 #14
okay, det er da også bare iorden.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester