Sida 1 av 1

Filhantering i C

Postat: 26 dec 2007, 16:37
av Aluhuru
Hejsan!
Finns det någon här som vet hur jag kan söka efter en viss sträng och få ut det radnummer som strängen finns på?
T.ex. Ordet 'tiger' finns på rad 2, 6, 14, ..., 33.
        Slut på filen.

Kod: Markera allt


#include <stdio.h>

#include <stdlib.h>

#include <string.h>



int main(int argc, char *argv[])

{

  FILE *fp;

  char filnamn [50];

  char searchString [60];

  char findString [60];

	

  printf("Välkommen till grep.\n\n");

  printf("Ange \"quit\" som filnamn eller som ord för att avsluta.\n\n");

  printf("Ge filnamn att leta i: ");

  fscanf(fp, "%s",filnamn);

  fp = fopen(filnamn,"r");

  if(fp = NULL)

  {

	  printf("Filen finns inte.\n");

  }

  if(fp == 'quit')

  {

	  printf("Då avslutar vi väl då...");

	  return 0;

  }

  printf("Ge ordet att leta efter: ");

  fscanf(fp,"%s",searchString);

  if(searchString == 'quit')

  {

	  printf("Då avslutar vi väl då...");

	  return 0;

  }

  findString = strstr(searchString,findString);
  fclose(fp);

  system("PAUSE");	

  return 0;

}
Jag fick som sagt inte riktigt till det med strstr()-funktionen heller, där jag fick "Inkompatibla typer i tilldelning".
Hoppas någon är villig att ge mig en hand i dessa jultider.

Mvh. Joakim

SV: Filhantering i C

Postat: 26 dec 2007, 17:10
av per9000
Wikibooks om programmering i C, avsnitten som handlar om strängar resp strstr:
http://en.wikibooks.org/wiki/C_Programming/Strings
http://en.wikibooks.org/wiki/C_Programming/Strings#The_strstr_function

Är inte dessa arrayer ganska korta - vad händer om din fil har 100 tecken - jag skulle tippa på att helvetet brakar loss då?

Kod: Markera allt

  char filnamn [50];
  char searchString [60];
  char findString [60];
Varför inte läsa en rad i taget - kolla om strängen du letar efter finns där, sen kolla nästa rad, och så vidare. Då håller du kolla på antalet rader i alla fall.

Annars kan du försöka få ut positionen på varje instans av ditt sökord och räkna antalet "\n" du hittar innan det.

HTH,
Per

SV: Filhantering i C

Postat: 26 dec 2007, 22:31
av mcNisse
Du kan inte tilldela en pekare till en char array.

Kod: Markera allt

findString = strstr(searchString,findString);
findString är en array och strstr returnerar en charpekare.

SV: Filhantering i C

Postat: 02 jan 2008, 22:57
av Megamannen
Precis som föregående talare säger, men lite utvecklat.
* Läs en rad i taget, utöka arraystorleken. Rekomenderar funktionen fgets som dessutom tar ett argument på hur stor buffer du ska läsa in. Så då brakar inte helvetet lös även ifall raden är större än arrayens storlek ;)
* Läs dokumentationen så du ser vad den returnerar ifall den hittat strängen och vad den returnerar när den inte hittar. Och vilken TYP det är den returnerar.


Här kan du läsa lite.
http://www.mrx.net/c/readfunctions.html#fgets
http://www.cs.cf.ac.uk/Dave/C/node19.html


Annars finns ju redan programmet du gör ;) Fast jag antar att du gör det för övnings skull
cat fil.txt | grep -n tiger