Filhantering i C

Här diskuteras programmering och utveckling
Aluhuru
Inlägg: 34
Blev medlem: 26 apr 2007, 18:46
OS: PCLinuxOS
Ort: Hallstahammar

Filhantering i C

Inlägg 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
Användarvisningsbild
per9000
Inlägg: 931
Blev medlem: 07 maj 2007, 11:06
OS: Ubuntu
Utgåva: 23.04 Lunar Lobster
Ort: Västerås
Kontakt:

SV: Filhantering i C

Inlägg 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
--
Per Erik Strandberg
Yet Another IT Consultant
Användarvisningsbild
mcNisse
Inlägg: 5211
Blev medlem: 06 feb 2007, 20:51
OS: Debian
Utgåva: Vet inte/ingen utgåva passar

SV: Filhantering i C

Inlägg 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.
KDE 4.5 SC är ute i det fria!!! Tjoho

Stagnation is good for nobody - after all if you don't progress you end up with gnome
Megamannen
Inlägg: 75
Blev medlem: 06 sep 2007, 19:50
Ort: Sverige

SV: Filhantering i C

Inlägg 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
Software can become hardware!
Skriv svar

Återgå till "Programmering och webbdesign"