C dilinde txt dosya içerisinden kelime/cümle aramak-değiştirmek [yardım]

0
Onaylı Üye
Üye
Katılım
4 Mart 2006
Mesajlar
2,019
Tepki puanı
1
Konum
Kocaeli UNI
C dilinde aşağıdaki işlemi yapmak istiyorum.Eğer yardımcı olabilirseniz çok sevinirim.Kimseden bu programı yazmasını istemiyorum,bana bunu yapmak için yeterli kaynak,yönlendirme veya kullanacağım komut bilgilendirmesi yapabilirseniz berhudar olurum :)

Yapmak istediğim şu şekilde.


Örneğin C:/iyinet/

klasörü içerisinde 10 tane text dosyası olsun ve bu text dosyalarının içerisinde paragraflar olsun.
a.txt
b.txt
..
..
x.txt gibi.

Program, aranılan kelimeyi/kelimeleri bu klasör içerisindeki tüm text dosyaları içerisinde bulduracak.
Örneğin "web master" kelimesini arattığımda çıktı olarak önceki 2 ve sonraki 2 kelimeyle beraber yazacak.

Bulunduğu dosya - Cümle
a.txt : iyi net web master ana sayfa
c.txt : hebele hübele web master ayşe fatma
..
.

Ayrıca 2. olarakta aranan kelime,istenilen kelime ile değiştirilecek.Eğer değiştirme işlemi yapılmak isteniyorsa,2 parametre istenecek kullanıcıdan.
1. parametre - aranan kelime(ler)
2. parametre - değiştirilecek kelime(ler)
şeklinde.
Ve bu klasör içerisindeki text dosyalarındaki tüm aranan kelimeler,yeni kelimeyle değiştirilecek.

Teşekkürler.
 
0
Onaylı Üye
Üye
Katılım
21 Mayıs 2010
Mesajlar
1,462
Tepki puanı
23
Konum
Maraşlıyık edem
kardeş,http://www.bilgisayarkavramlari.com/2008/10/22/c-ile-dosya-islemleri/ burayı bir gözden geçir ufak çaplı denemeler yap,eğer tam olarak istediklerini karşılamıyorsa google da "c dosya işlemleri" gibi bir aramayla baya bir dökümana ulaşabilirsin.okuldayken bu şekilde c++ ile basit bir HTML Editör yazmıştım.Okul bitince c programlarını pc'den ve bilgilerimi zihnimden sildim :)
Yine de yardımcı olabileceğim bir konu olursa haber verirsen yardımcı olmaya çalışırım
 
0
Onaylı Üye
Üye
Katılım
4 Mart 2006
Mesajlar
2,019
Tepki puanı
1
Konum
Kocaeli UNI
Teşekkürler ama bunları biliyorum zaten,yetersiz kalıyor.

Herhangi bir text dosyası içinde arama yapmak değil istediğim,bir klasör içerisindeki tüm text dosyalarında arama yapmak ve değiştirme yapmak.Klasör içinde başka klasörde olabilir,onun içindeki textleride almam gerekebilir.

Bana bir döngü içerisinde belirtilen dizindeki tüm text dosyalarını hafızaya alan kod lazım.Ben yaptım onu ama dizin içerisinde bi klasör daha olursa olmuyor,hepsi txt olması lazım :S
 
T
trgy
Misafir
Deitel&deitel how to c kitabında buna benzer bir örnek vardı. Tam hatırlayamadım şimdi sayfasını ama elinde varsa bir araştırmanı öneririm.
 
0
Onaylı Üye
Üye
Katılım
21 Mayıs 2010
Mesajlar
1,462
Tepki puanı
23
Konum
Maraşlıyık edem
Teşekkürler ama bunları biliyorum zaten,yetersiz kalıyor.

Herhangi bir text dosyası içinde arama yapmak değil istediğim,bir klasör içerisindeki tüm text dosyalarında arama yapmak ve değiştirme yapmak.Klasör içinde başka klasörde olabilir,onun içindeki textleride almam gerekebilir.

Bana bir döngü içerisinde belirtilen dizindeki tüm text dosyalarını hafızaya alan kod lazım.Ben yaptım onu ama dizin içerisinde bi klasör daha olursa olmuyor,hepsi txt olması lazım :S

Ali Çehreli şöyle bir örnek yazmış,belki bir fikir verebilir

PHP:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct 
{
    char * ad;
    int yas;
}
Insan;

Insan cocuklar[] =
{ 
    { "Ali", 3 },
    { "Veli", 2 },
    { "Ayse", 1 }
};

#define NESNE_ADEDI(x) (sizeof(x) / sizeof(*(x)))

int Insan_ad_karsilastiran(const void * b, const void * i)
{
    /* Once gercek turlerine donusturelim */
    const Insan * birinci = b;
    const Insan * ikinci = i;
    
    return strcmp(birinci->ad, ikinci->ad);
}

int Insan_yas_karsilastiran(const void * b, const void * i)
{
    /* Once gercek turlerine donusturelim */
    const Insan * birinci = b;
    const Insan * ikinci = i;

    if      (birinci->yas <  ikinci->yas) return -1;
    else if (birinci->yas == ikinci->yas) return  0;
    else                                  return  1;
}

void Insan_yazdir(const Insan * insan)
{
    printf("%s (%d)\n", insan->ad, insan->yas);
}

void Insanlar_yazdir(const Insan * insanlar, int adet)
{
    int i = 0;
    for (i = 0; i != adet; ++i)
    {
        Insan_yazdir(&insanlar[i]);
    }
}

int main()
{
    printf("Simdi isim sirasindalar:\n");

    qsort(cocuklar,
          NESNE_ADEDI(cocuklar), sizeof(Insan),
          Insan_ad_karsilastiran);

    Insanlar_yazdir(cocuklar, NESNE_ADEDI(cocuklar));

    printf("\nSimdi yas sirasindalar:\n");

    qsort(cocuklar,
          NESNE_ADEDI(cocuklar), sizeof(Insan),
          Insan_yas_karsilastiran);

    Insanlar_yazdir(cocuklar, NESNE_ADEDI(cocuklar));

    return EXIT_SUCCESS;
}
 
0
Onaylı Üye
Üye
Katılım
4 Mart 2006
Mesajlar
2,019
Tepki puanı
1
Konum
Kocaeli UNI
Deitel&deitel how to c kitabında buna benzer bir örnek vardı. Tam hatırlayamadım şimdi sayfasını ama elinde varsa bir araştırmanı öneririm.

Kocaelide bulamadım hiç bi yerde,sipariş edecek vaktimde kalmadı.İnternetten e-book'una bakacağım artık,teşekkürler.

Ali Çehreli şöyle bir örnek yazmış,belki bir fikir verebilir

PHP:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct 
{
    char * ad;
    int yas;
}
Insan;

Insan cocuklar[] =
{ 
    { "Ali", 3 },
    { "Veli", 2 },
    { "Ayse", 1 }
};

#define NESNE_ADEDI(x) (sizeof(x) / sizeof(*(x)))

int Insan_ad_karsilastiran(const void * b, const void * i)
{
    /* Once gercek turlerine donusturelim */
    const Insan * birinci = b;
    const Insan * ikinci = i;
    
    return strcmp(birinci->ad, ikinci->ad);
}

int Insan_yas_karsilastiran(const void * b, const void * i)
{
    /* Once gercek turlerine donusturelim */
    const Insan * birinci = b;
    const Insan * ikinci = i;

    if      (birinci->yas <  ikinci->yas) return -1;
    else if (birinci->yas == ikinci->yas) return  0;
    else                                  return  1;
}

void Insan_yazdir(const Insan * insan)
{
    printf("%s (%d)\n", insan->ad, insan->yas);
}

void Insanlar_yazdir(const Insan * insanlar, int adet)
{
    int i = 0;
    for (i = 0; i != adet; ++i)
    {
        Insan_yazdir(&insanlar[i]);
    }
}

int main()
{
    printf("Simdi isim sirasindalar:\n");

    qsort(cocuklar,
          NESNE_ADEDI(cocuklar), sizeof(Insan),
          Insan_ad_karsilastiran);

    Insanlar_yazdir(cocuklar, NESNE_ADEDI(cocuklar));

    printf("\nSimdi yas sirasindalar:\n");

    qsort(cocuklar,
          NESNE_ADEDI(cocuklar), sizeof(Insan),
          Insan_yas_karsilastiran);

    Insanlar_yazdir(cocuklar, NESNE_ADEDI(cocuklar));

    return EXIT_SUCCESS;
}


Teşekkür ederim yardımlarınız için tekrar ama bu çok farklı bir örnek,bunu yapmakta sorun yok zaten.İçeriğini bilmediğiniz 10larca dosyada arama,bulunan kelimeyle önceki ve sonraki 2 şer kelimeyi yazma,aranan kelimeyi istenilen kelimeyle değiştirme işlemleri yapmamız gerekiyor.Bu örnek çok farklı.
 
Geri
Üst