İçeriğe geç
ShiftDelete.Net
Haber ara/ SDN'ye SorGiriş
Haber Akışı SDNTV İnceleme Forum Yapay Zeka Akıllı Telefon Elektrikli Otomobil Oyun ShiftDelete.Net Global Teknoloji Haberleri Mobil Otomobil Donanım Savunma Bilim Sosyal Medya İnternet Giyilebilir Teknoloji Rehber Ürünler Son dakika Yazarlar
  1. Ana sayfa
  2. Topluluk
  3. Programlama
  4. Programlama Dilleri
Programlama Dilleri

C Programlama Proje

haber7712.10.201020 cevap8.995 görüntüleme
2009'den beri30 mesaj
#1
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.
Cevaplar
2007'den beri17 bin mesaj
#2
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?
2010'den beri6 mesaj
#3
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.
haber77 Konuyu açan
2009'den beri30 mesaj
#4
tşk
2010'den beri28 mesaj
#5
bunu zaten yapabilen çok gelişmiş bir komut satırı programı zaten var http://stahlworks.com/dev/index.php?tool=rep
replace anahtarının parametrelerini inceleyip kendine uygun bir sonuç oluşturabilirsin
2010'den beri24 mesaj
#6
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
2010'den beri6 mesaj
#7
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%28v=VS.85%29.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. :)
2010'den beri28 mesaj
#8
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.
2010'den beri91 mesaj
#9
koü bilgisayar müh. prolab 1 projesi bu sen de bizden misin
2010'den beri6 mesaj
#10
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:)
2010'den beri28 mesaj
#11
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 Konuyu açan
2009'den beri30 mesaj
#12
programın tamamını yazmanızı tabi ki istemiyorum. ama bazı noktalarda yardım almak gerekir.bu bilgiler faydalı oldu teşekkür ederim
2009'den beri125 mesaj
#13

#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
2010'den beri28 mesaj
#14
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);
}
haber77 Konuyu açan
2009'den beri30 mesaj
#15
güzel bir örnek
2009'den beri125 mesaj
#16
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 :)
2010'den beri28 mesaj
#17
mgsmus dedi: ↑
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 :)
2009'den beri125 mesaj
#18
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.
2010'den beri14 mesaj
#19
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..
2010'den beri91 mesaj
#20
cnak dedi: ↑
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
2009'den beri125 mesaj
#21
İ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.

Cevabını yaz

Cevap yazmak için giriş yap ya da üye ol. Eski forum kullanıcı adın ve parolanla girebilirsin.