[ istrazivac @ 16.07.2001. 20:24 ] @
Pozdrav svima.Imam mali problem.Ovako,otvorim fajl za citanje(pomoci ifstream objekta) i ceo njegov sadrazaj premestim u ,recimo char bufer[1000000] .Sada ja mogu da prikazem ceo fajl,odnosno ceo sadrzaj bafera,ali meni treba samo odredjena linija koja pocinje odredjenom recju.Znaci recimo imam char [5] = "pera",i zelim da izvucem samo tu liniju neku char promenljivu koja pocinje u fajlu sa 'pera'.Nadam se da razumete sta mi treba.Stao mi mozak totalno,probao sam hiljadu stvari,ali nista nije kako treba,ako nekome pada na pamet pomagajte,puno hvala unapred.
[ Vojislav Milunovic @ 16.07.2001. 20:33 ] @
Koliko ja vidim ti oces da linuji koja pocinje sa "pera" prikazes?
ok to nije problem idemo lagano i prosto.

Code:


#include<stdio.h>
#include<string.h>

const char *word = "pera";

int main(){
 FILE *stream;
 char data[4096];
 stream = fopen("/path/to/file","r");
 while ( fgets(data,4096,stream) != NULL )
    if ( strncmp(word,data,strlen(word)) == 0 )
       break;
 fclose(stream);
 printf("%d",data);
}


Ovaj program nalazi liniju u fileu koja pocinje sa "pera" i kad je nadje zavrsava sa pretragom,zatvara file i stampa datu liniju na ekran.
[ istrazivac @ 17.07.2001. 02:39 ] @
Predator,hvala ,nemas pojma koliko si mi pomogao,ja se zajebavam vec ceo dan i noc sa ovim,a ti si mi resio problem zacas.Jos jednom hvala ti puno!!!
[ istrazivac @ 17.07.2001. 04:01 ] @
Pozdrav svima i jos jedno pitanjce za predatora i sve ostale.Ovaj prethodni kod sto si mi dao super radi kao sto sam rekao vec,samo mi treba jos jedna funkcijakoja radi nesto slicno ovoj prethodnoj.Nalazi odredjeni string u fajlu i od sledece linije,znaci od linije ispod nadjenog stringa, do kraja fajla smesta u bafer.Ne znam da li sam dobro objasnio,ali ajd ovako na primer,ovo je sadrzaj neko fajla:

<bof>
dhsfjsdhfjkdhkjfsjd
sdhfjsdkfjshdjkfhkdsjf
pera
mika
sdfsdfjdfkljsdkljfskld
sdjkfsjdfkdfjklfsjkdf
jskdfjsdlfjkdfjsdfdklj
<eof>

Meni sada treba sve ispod "pere",znaci pocev sa linojom mika pa do kraja fajla.Zato sto ja imam recimo peru kao odrednicu,ali mika ne mora da bude tu nego moze da bude laza,ali pera je tu sigurno uvek i moram prema njemu da se orijentisem.Hvala unapred jos jednom za pomoc,i nadam se da ne zamaram nikoga,posebno ne predatora,ali sta cu,koristim uglavnom MFC klase za rad sa fajlovima i ostalim glupostima,a sada mi zatrebalo nesto iz ovih standardnih biblioteka.
[ Vojislav Milunovic @ 17.07.2001. 10:16 ] @
Mozes to da izvedes sa mmap i strstr.Evo primera :

Code:

#include<sys/types.h>
#include<sys/mman.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#include<string.h>

const char *word = "pera";

int main(){
 void *addr;
 int fd;
 struct stat buf;
 char *tmp;
 
 stat("/path/to/file",&buf);
 fd = open("/path/to/file",O_RDONLY);
 addr = mmap(0,buf.st_size,PROT_READ,MAP_PRIVATE,fd,0);

 if (   (tmp = strstr(addr,word) ) == NULL ){
   printf("String nije nadjenn");
   close(fd);
   munmap(addr,buf.st_size);
 }

 tmp +=strlen(word);
 printf("%s",tmp);

// sada od tmp pa do pojave  \0 imas trazeni buffer

 close(fd);
 munmap(addr,buf.st_size);
}





[Ovu poruku je menjao predator dana 07-17-2001 u 09:19 AM GMT]
[ kajla @ 17.07.2001. 16:53 ] @
Moze jedno pod pitanje?
Zanima me kao da procitam samo odredjenu liniju fajla-recimo 100-tu liniju? Znaci treba da otvorim fajl postavim file pointer na pocetak stote linije i ocitam tu linuju.

poz.
[ istrazivac @ 17.07.2001. 17:20 ] @
Predator jos jednom ti puno hvala opet si mi puno puno skratio trud!!! Ali sada sam se vec navadio,pa izvini,ali moram samo jos neku stvar da te pitam,posto sam vec rekao da se ne snalazim sa standardnim bibliotekama,a vidim da ih ti super poznajes.Ovako,interesuje koja je sintaksa zadavanja relativne putanje fajla,jer sam sve prekopao i nisam uspeo da nadjem,i probao sam sve zivo,ali nije uspelo.Recimo imam putanju do fajla "c:dir1dirfile.txt" ,a ja hocu da zadam relativno putanju, recimo nesto tipa "\dir1\...\file.txt" da ga on sam potrazi,znam da je to moguce posto mi jedna MFC funkcija daje mogucnost otvaranja fila kada joj se kao parametar prosledi ta relativna putanja,ali nigde nema primera kako to izgleda,a bas mi treba ocajnicki,jer nemogu drugacije da izvedem jednu stvar.I drugo i poslednje kako se "sabiraju" dva stringa,odnosno imam recimo: char prvi[5] = "pera" i char drugi[5] = "mika" i char treci[],koj treba da bude jednak "mikapera",pa ako znas koja je ta fukcija koja kopira prvi char i na njegov kraj dodaje drugi.Ako nemas vremena ili te mrzi da pises,O.K je,jer sam te iovako dosta vec smorio.U svakom slucaju ti mnogo hvala jer si mi vec dosta pomogao.
[ kajla @ 17.07.2001. 17:55 ] @
Sto se tice spajanja stringa tu ti je strcat() (imas i strncat())
znaci:

strcat(deststring,srcstring);
Ali ako imas vise stringova da spojis mozes da koristis sprintf():

sprintf(dest,"%s%s%s",str1,str2,str3);

Kad kazes relativna putanja mislis u odnosu na tekuci dir?
ako na to mislis dovoljno je da zadas "dir1\dir2\file".

poz.

[Ovu poruku je menjao kajla dana 07-17-2001 u 05:58 PM GMT]
[ Vojislav Milunovic @ 17.07.2001. 21:38 ] @
ZA ovu 100 liniju mozes kao i gore da vadis liniju po liniju i da ubacis dodatnu promenljivu koju ces uvek testirati i povecavati za 1.Kad dodjes do 100 kazem mu samo break; i imas svoju liniju u buf ;o)
[ Vojislav Milunovic @ 17.07.2001. 21:39 ] @
Sto se tice putanja tipa ../../dir/./dir3/file ;o) to je na OSu da raspozna gde se taj file nalazi na fs tako da nemoj da se time zaludjujes jedino ako neces da pises svoj fs i kompletan interfejs za manipulaciju sa njim ;o))
[ kajla @ 18.07.2001. 10:34 ] @
Citat:
predator je napisao:
ZA ovu 100 liniju mozes kao i gore da vadis liniju po liniju i da ubacis dodatnu promenljivu koju ces uvek testirati i povecavati za 1.Kad dodjes do 100 kazem mu samo break; i imas svoju liniju u buf ;o)


Eh, pa to i nije neko resenje, ja bi bre nesto tipa postavim pointer na 100-tu liniju ali bez petlje, vec nesto kao fseek() (ako je to uopste moguce).

poz.
[ Vojislav Milunovic @ 18.07.2001. 11:20 ] @
Pa i sam znas da je 100 linija ona posle 99 \n.Tako da sa lseek() nemozes tacno da odredis gde ce se zavrstiti 99ti \n.Jedino resenje predstavlja ova fja. (fgets) koja iz buffera uzima do pojave \0 ili \n.