C Programlama Proje

  • Konuyu başlatan Konuyu başlatan haber77
  • Başlangıç tarihi Başlangıç tarihi

haber77

SDN Okuru
Katılım
26 Haziran 2009
Mesajlar
30
Reaksiyon puanı
1
Puanları
0
Merhaba arkadaşlar.C den proje aldım.Şöyle;programabir dizin altındaki tüm klasörleri tarayacak(mesela C:/users gibi) ve uzantısı txt olanları bulacak . txt içindeki kelimeleri değiştirme seçeneği de olacak yardımlarınızı bekliyorum.
 
Katılım
31 Aralık 2007
Mesajlar
17,486
Reaksiyon puanı
189
Puanları
243
Hem de c ile. Hiç uğraşılmaz :D Ben sırf lazım oldu diye c# ile benzer bir şeyi yapmıştım. Nette hiç aradın mı örnek kod falan?
 

opeth.

Öğrenci
Katılım
11 Ekim 2010
Mesajlar
6
Reaksiyon puanı
0
Puanları
0
Aklıma bir yöntem geldi. Eğer windows üzerinde çalışıyorsa,
DOS üzerinden arattır. Parametrelerini hatırlamıyorum ama "dir" komutu listeliyor.
dir *.txt > C:\temp.txt
komutunu verirsin.Böylece temp.txt ye kaydolmuş olur ordan da okursun, aslında konsol çıktısını direkt olarak okuma vardı da şimdi hatırlamıyorum, çok meşekkatli bir yoldu. Böylesi daha kolay sanki. İçeriği okuduktan sonra da temp.txt ni silersin.
Şimdilik aklıma gelen yol bu. Başka bir yol gelirse söylerim.
 

carsisamet

Öğrenci
Katılım
1 Şubat 2010
Mesajlar
24
Reaksiyon puanı
1
Puanları
0
kocaeli bilgisar mühendisliğinin ödevi bu arkadaşım da yapamadı bi türlü zaten okulda bi nane öğretmiyolar diye dert yanıodu bilen varsa yardımı bende bekliyorum
 

opeth.

Öğrenci
Katılım
11 Ekim 2010
Mesajlar
6
Reaksiyon puanı
0
Puanları
0
yanlış hatırlamıyorsam system() fonksiyonu ile bu işi tek satırda çözmeniz mümkün. Tabi ki I/O files okumayı bildiğinizi varsayıyorum.DOS un dir komutu /b parametresi ile çalıştırırsanız o saçma şeylerden de kurtulursunuz. şöyle ki:
system("dir /b *.txt > C:\\tmp.txt");
satırıyla tahminimce direkt olarak txt ye aktarılmış olur ordan da okursunuz.
Bu ödevin çözümü muhtemelen windows.h tan geçer. Yerinizde olsam msdn den bakardım. Hadi linki de ben vereyim :)
http://msdn.microsoft.com/en-us/library/ms682073(v=VS.85).aspx

dir komutuna fazla seçenek eklemek isterseniz konsola:
dir /? yazarak parametreleri öğrenmeniz mümkün. Bunu da halledince heralde fazla da bir şey kalmıyor ödevde. :)
 

0tt0man

Öğrenci
Katılım
13 Ekim 2010
Mesajlar
28
Reaksiyon puanı
2
Puanları
0
Düzeltme: Allah Allah bu windows.h ben borland c++ kullanırken bende yoktu, çok sıkıntısını çekmiştim. Vardı da benmi bilmiyordum ilginç.

Zamanında baya C, C++ kasmıştım ama uzun zaman oldu. Elimde ne derleyici var ne de editör.

Ki olsa bile yine yardım etmezdim, internette böyle ödev için forumları aşındıran çok kişi var. Öğrencilerin yapması gereken şeyleri başkalarının yapmasını doğru bulmuyorum.

Bu benim düşüncem beni bağlar, yardım etmek isteyen yardımını yine esirgemesin.
 

Ugurcan377

Öğrenci
Katılım
2 Mayıs 2010
Mesajlar
91
Reaksiyon puanı
2
Puanları
0
koü bilgisayar müh. prolab 1 projesi bu sen de bizden misin
 

opeth.

Öğrenci
Katılım
11 Ekim 2010
Mesajlar
6
Reaksiyon puanı
0
Puanları
0
tamam da c# a özgü değil ki. Biz de zamanında kullandık C de windows.h kütüphanesini:) Dilersen deneyebilirsin. Gayet güzel çalışıyor kütüphane. Yardım etmem de sadece zor yerini gösterdim, herkes msdos komutlarını veyahut windows.h kütüphanesini ezbere bilmek zorunda değil. Bence ödevin kendisi yazılmadığı takdirde böyle yardımların hiçbir sakıncası yok. :)
Bu da benim şahsi görüşüm:)
 

0tt0man

Öğrenci
Katılım
13 Ekim 2010
Mesajlar
28
Reaksiyon puanı
2
Puanları
0
Dediğim gibi bu benim görüşüm. Kimsenin katılmasını beklemiyorum.
Windows.h kütüphanesine de baktım haklısın, ama ben borland c++ ile kafayı yerken bunu nasıl görmedim hayret. Ya benim kullandığım sürümde yoktu ya da gözümden kaçtı, dediğim gibi nerden baksan 10 yıldan fazla oldu.
 

haber77

SDN Okuru
Katılım
26 Haziran 2009
Mesajlar
30
Reaksiyon puanı
1
Puanları
0
programın tamamını yazmanızı tabi ki istemiyorum. ama bazı noktalarda yardım almak gerekir.bu bilgiler faydalı oldu teşekkür ederim
 

mgsmus

Asistan
Katılım
1 Aralık 2009
Mesajlar
125
Reaksiyon puanı
5
Puanları
0
Kod:
#include <windows.h>
#include <string.h>

void DirScanStub()
{
    const char dirName[] = "c:\\temp\\";
    const char dirScan[] = "c:\\temp\\*.*";
    char* pname = 0; /* Dosya adı */
    WIN32_FIND_DATA info;
    HANDLE h = FindFirstFile(dirScan,&info);
    if (h == INVALID_HANDLE_VALUE)
    {
        /* mesaj?.. */
        return;
    }
    pname = (char*)malloc(MAX_PATH); /* (char*) sadece C++ için  */
    do
    {
        if ((info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0)
            continue; /* dizinleri atla */
        strcat(strcpy(pname,dirName),info.cFileName);
        /* Bir sonraki dosya ismi cepte...    */
        /* Aç- işlem yap - kapat ...*/
    } while (FindNextFile(h,&info));
    FindClose(h); /* Dizin taramayı kapat */
    free(pname);
}
WIN32_FIND_DATA kısmından da anlaşılacağı gibi sadece WIN32. Bir yerden başlamk için yardımcı olur sanırım
 

0tt0man

Öğrenci
Katılım
13 Ekim 2010
Mesajlar
28
Reaksiyon puanı
2
Puanları
0
Tamda helal olsun diyecektim ki fonksiyon isminden bir yerlerden alıntı yapıldığı belli oluyor. http://www.daniweb.com/forums/thread143279.html

WIN32_FIND_DATA FindFirstFile, FindFirstFileEx, or FindNextFile fonksiyonlarından biri çağrıldığında ilgili dosyanın
DWORD dwFileAttributes; FILETIME ftCreationTime; FILETIME ftLastAccessTime; FILETIME ftLastWriteTime; DWORD nFileSizeHigh; DWORD nFileSizeLow; DWORD dwReserved0; DWORD dwReserved1; TCHAR cFileName[MAX_PATH]; TCHAR cAlternateFileName[14];
bilgilerini tutan bir nesne
WIN32_FIND_DATA info; diyerek info adında yeni bir WIN32_FIND_DATA nesnesi oluşturuyorsun

Örnek çok güzelmiş, prof birine ait olduğu kesin

#include <windows.h>
#include <string.h>

void DirScanStub()
{
const char dirName[] = "c:\\temp\\";
const char dirScan[] = "c:\\temp\\*.*";
char* pname = 0; /* File name buffer */
WIN32_FIND_DATA info;
HANDLE h = FindFirstFile(dirScan,&info);
if (h == INVALID_HANDLE_VALUE)
{
/* print message?.. */ Eğer dizindeki ilk dosya okuma sırasında bir hata oluşmuşsa hata mesajı buraya
return;
}
pname = (char*)malloc(MAX_PATH); /* (char*) for C++ only */
do
{
if ((info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0) info nesnesinin bilgilerini aldığı dosya bir dizinmi onu kontrol ediyor
continue; /* skip directories */ Eğer dizin ise atlıyor
strcat(strcpy(pname,dirName),info.cFileName); dizin+dosya adı şeklinde dosyanın path'ini çıkartıyor ama parametre kısmında srtcat çıktısı hangi değişkene gidiyor bak orasını bende anlamadım :)
/* Now we have the next file name... */ Buradan sonrası sana kalmış demek istiyor, artık dosya yolu + ismine sahipsin
/* Open, process then close the file ...*/ ihtiyacın olan dosya içinde arama ve değiştirme işlemini yap ve dosyayı kapat
} while (FindNextFile(h,&info));
FindClose(h); /* Close dir scan */
free(pname);
}
 

mgsmus

Asistan
Katılım
1 Aralık 2009
Mesajlar
125
Reaksiyon puanı
5
Puanları
0
Valla çok isterdim ama C bilmiyorum. Ben sadece yardımcı olmak için google dan bi tarama yaptırdım o kadar :)
Bi de

strcat(strcpy(pname,dirName),info.cFileName);

kısmında hangi değişkene gidiyor anlamadım demişsin. Sanırım şöyle


(strcpy için)
Hedef Kaynak
-------------------------------------------
pname dirName


(strcat için)
Hedef Kaynak
-------------------------------------------
pname info.cFileName



yani dizin ve dosya adı pname'e gidiyor. Dosya ve dizin adını bu şekilde birleştirmiş. Ya da sallıyorum :)
 

0tt0man

Öğrenci
Katılım
13 Ekim 2010
Mesajlar
28
Reaksiyon puanı
2
Puanları
0
Valla çok isterdim ama C bilmiyorum. Ben sadece yardımcı olmak için google dan bi tarama yaptırdım o kadar :)
Bi de

strcat(strcpy(pname,dirName),info.cFileName);

kısmında hangi değişkene gidiyor anlamadım demişsin. Sanırım şöyle


(strcpy için)
Hedef Kaynak
-------------------------------------------
pname dirName


(strcat için)
Hedef Kaynak
-------------------------------------------
pname info.cFileName



yani dizin ve dosya adı pname'e gidiyor. Dosya ve dizin adını bu şekilde birleştirmiş. Ya da sallıyorum :)

Hacı strcpy fonksiyonu srtcat'in parametre bloğunda. strcpy fonksiyonu return değeri olarak çıktıyı gönderiyor, yani çıktı değerinden pname değişkenine müdaahele edemez. Aklıma gelen tek bir ihtimal C'nin üstünlüklerinden olan pointer kullanımı. strcpy fonksiyonu strcat fonksiyonuna pname değişkenin pointer'ini (bellek adresini) gönderiyorsa o zaman olabilir.
Fakat strcpy fonksiyonu için dönüş değeri
Return Value

destination is returned.

diyor yani pointer değil değerin kendisi dönüyor.

Bir usta açıklarsa iyi olur :)
 

mgsmus

Asistan
Katılım
1 Aralık 2009
Mesajlar
125
Reaksiyon puanı
5
Puanları
0
pname = (char*)malloc(MAX_PATH); kısmında pname için bellek ayrılmış, tüm dosya yolunu dosya adıyla alacak kadar (maksimum 260 karakter). Byte cinsinden. Strcpy ve strcat dosya yolunu dosya adıyla birlikte(yani return value) ayrılmış belleğe yazıyor.
 

cnak

Öğrenci
Katılım
20 Ekim 2010
Mesajlar
14
Reaksiyon puanı
0
Puanları
0
system("dir/b/s *.txt > C:\\temp.txt"); komutuyla txt dosyalarının adreslerini ve isimlerini temp.txt nin içine attım.bu aşamada bu txt dosyalarında nasıl işlem yapıcam.içlerinde kelime arayacağım örneğin.ama elimde dosyaların kendisi değil isimleri ve adresleri var.yardım eder misiniz..
 

Ugurcan377

Öğrenci
Katılım
2 Mayıs 2010
Mesajlar
91
Reaksiyon puanı
2
Puanları
0
system("dir/b/s *.txt > C:\\temp.txt"); komutuyla txt dosyalarının adreslerini ve isimlerini temp.txt nin içine attım.bu aşamada bu txt dosyalarında nasıl işlem yapıcam.içlerinde kelime arayacağım örneğin.ama elimde dosyaların kendisi değil isimleri ve adresleri var.yardım eder misiniz..
bu yöntemi ben denedim 1 yerde patlıyor haberin olsun
 

mgsmus

Asistan
Katılım
1 Aralık 2009
Mesajlar
125
Reaksiyon puanı
5
Puanları
0
İster WIN32_FIND_DATA yönetimini kullanın ister system("dir/b/s *.txt > C:\\temp.txt"); yönetimini kullanın her şekilde bir döngü yapıp, tek tek dosyaların içerisinde arama yaptırmanız lazım.

system yöntemini kullanıp temp.txt dosyasına dosya isimlerini yazdırmışsınız. Demek ki temp.txt dosyası tekrar açılacak içerisinden dosya adları alınıp bir diziye aktarılacak. daha sonra dizi elemanları döngüye sokulup içinde arama yapılacak. diziyi iki üç boyutlu tutup ya da obje olarak kullanıp dosya adı-bulundu/bulunmadı-satır şeklinde tutacak.

Dosya adlarını oku
Diziye aktar
Aranacak kelimeyi belirle
Sonuç dizisi oluştur
Foreach
Bulundu ise sonuç dizisine dosya adını,satırı, kaç kez geçtiğini vs... yaz
Döngüyü bitir
Sonuç dizisini yazdır

gibi

ifstream konusunu inceleyin.
 
Üst