C De Hata Ayıklama Yardım.
-
Arkadaşlar elimde c dilinde yazdığım bi program var ama bi türlü hatalarını ayıklayamadım.Amacım cmd ekranından bir dizin girilecek, girilen dizinin içindeki alt klasörler dahil olmak üzere tüm txt uzantılı dosyaları arayacak..ardından sizden txt uzantılı dosyaların içinde aramanız için bir cumle girmenizi isteyecek.ve bulduğu tüm txt uzantılı dosyalarda bu cümleyi arayacak.eğer girilen cümle bulunursa sizden tekrar bir cümle girmenizi isteyecek txt nin içinde bulduğu ilk girdiğimiz cümleyi yenisiyle değiştirip değiştirilen cümlenin iki kelime öncesiyle iki kelime sonrasını ekrana yazdıracak...Bu arada büyük harf küçük harf duyarlılığı olacak..arkadaşlar acil olarak yardımlarınızı bekliyorum proje sunumu yarın.. bulana benden çikolata ;
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<windows.h> #include<conio.h> void txtAra(const char *); int cumleAra(char [1024],char [100],char [100]); main(){ char dizin; gets(&dizin); txtAra(&dizin); printf("\n\n===================================================="); getch(); } //=============================================================================================================== void txtAra(const char *dizin) { WIN32_FIND_DATA bulunandosya; HANDLE anlikdosya; char aranandizin[1024]={0}; char yeniCumle[100]; char cumle[100]; sprintf(aranandizin,"%s\\*",dizin); anlikdosya=FindFirstFile(aranandizin,&bulunandosya); char tumDizin[1024]={0}; int sonuc,kontrol1; printf("\nGirilen %s dizininde bulunan .txt uzantili dosyalarin icinde \n",&dizin); printf("\nAramak istediginiz cumleyi giriniz : "); scanf("%s",cumle); printf("girdiginiz cumleyi hangi cumle ile degistirmek istiyorsunuz?\ngiriniz : "); scanf("%s",yeniCumle); printf("====================================================\n\n"); for(;;){ if(bulunandosya.dwFileAttributes==FILE_ATTRIBUTE_DIRECTORY) { if(strcmp(bulunandosya.cFileName,".")&&strcmp(bulunandosya.cFileName,"..")){ sprintf(aranandizin,"%s\\%s",dizin,bulunandosya.cFileName); txtAra(aranandizin);} } else{ if(!strcmp(bulunandosya.cFileName+strlen(bulunandosya.cFileName)-4,".txt")){ sprintf(tumDizin,"%s\\%s\n",dizin,bulunandosya.cFileName); cumleAra(tumDizin[],cumle[],yeniCumle[]);} sonuc=cumleAra(tumDizin[],cumle[],yeniCumle[]); if(sonuc==1){kontrol1=sonuc;} } if(FindNextFile(anlikdosya,&bulunandosya)== 0 ){ return;} } if(kontrol1 != 1) printf("Aradiginiz cumle girdiginiz dizindeki dosyalarin iceriginde yok!"); } //=============================================================================================================== int cumleAra(char tumdizin[],char cumle[],char yeniCumle[]) { FILE *openTxt; char formatliDizin[1024]; char bulunanCumle[512]; char tumMetin[4096]={0}; int dizinUzunlugu = 0 , metinuzunlugu = 0 , cumleUzunlugu=0 , kontrol2 = 0; int a,b,i,j,k,sayac,katarTut,iki=2,gerisayac,ilerisayac,yaz; char *kontrol; dizinUzunlugu=strlen(tumdizin); metinUzunlugu=strlen(tumMetin); cumleUzunlugu=strlen(cumle); //================================================================== j=0; //kesikli şeritler arasında for(i=0; i<dizinUzunlugu; i++) //kalan kısım tümDizin { //stringimizin formatını formatliDizin[i+j] = tumdizin[i]; //değiştirmeye yarar if(tumdizin[i] == "\\" ) { // örnek format; j=j+1; // c:\xdos\y formatliDizin[i+j] = tumdizin[i]; // değiştirilmiş hali; ; } // c:\\xdos\\y } formatliDizin[i+j+1] = '\0'; // *** fopen ile dosya açmak için *** //=================================================================== openTxt=fopen(formatliDizin,"r"); fgets(tumMetin,4096,formatliDizin); fclose(openTxt); kontrol=strstr(tumMetin,cumle); if(kontrol != NULL) { kontrol2=1; printf("%s\n\ndizininin icinde bulunan cumle;\n",tumdizin); for(a=0;a<metinUzunlugu-cumleUzunlugu+1;a++) { if(a==0){ katarTut=a; katarTut2=a; sayac=0; gerisayac=0; ilerisayac=0; gerisar=0 ilerisar=0 for(b=0;b<cumleUzunlugu;b++) { if(cumle[b]==tumMetin[katarTut]) { sayac=sayac+1; katarTut=katarTut+1; if(sayac==cumleUzunlugu) { while(iki>0 && ((katarTut2-1)!=0) && (katarTut2!=0)) { if(tumMetin[(katarTut2-1]==" " || (tumMetin[katarTut2-1]=="\n") || (tumMetin[katarTut2-1]==".") || (tumMetin[katarTut2-1]==",")) {iki=iki-1; gerisar=gerisayac;} gerisayac=gerisayac+1; katarTut2--; } while(iki>0 && (tumMetin[katarTut2+cumleUzunlugu]!=NULL)) { if(tumMetin[katarTut2+cumleUzunlugu]==" ") || (tumMetin[katarTut2+cumleUzunlugu]=="\n") || (tumMetin[katarTut2+cumleUzunlugu]==".") || (tumMetin[katarTut2+cumleUzunlugu]==",") {iki=iki-1; ilerisar=ilerisayac;} ilerisayac=ilerisayac+1; katarTut2++; } for(yaz=a-gerisar;yaz<(a+ilerisar);yaz++) {printf("%s",tumMetin[yaz]);} printf("Eski metinde bulunan cumle sirasi : %d\n\n",&a); printf("\n\nDegistirilmis metin : \n"); for(yaz=a-gerisar;yaz<a;yaz++) {printf("%s",tumMetin[yaz]);} printf("%s",yeniCumle); for(yaz=a;yaz<a+ilerisar;yaz++) {printf("%s",tumMetin[yaz]);} } } } } if((tumMetin[a]==".") || (tumMetin[a]=="\n") || (tumMetin[a]==" ") || (tumMetin[a]==",")) { katarTut=a+1; katarTut2=a+1; sayac=0; gerisayac=0; ilerisayac=0; gerisar=0 ilerisar=0 for(b=0;b<cumleUzunlugu;b++) { if(cumle[b]==tumMetin[katarTut]) { sayac=sayac+1; katarTut=katarTut+1; if(sayac==cumleUzunlugu) { while(iki>0 && ((katarTut2-1)!=0) && (katarTut2!=0)) { if(tumMetin[(katarTut2-1]==" " || (tumMetin[katarTut2-1]=="\n") || (tumMetin[katarTut2-1]==".") || (tumMetin[katarTut2-1]==",")) { iki=iki-1; gerisar=gerisayac; } gerisayac=gerisayac+1; katarTut2--; } while(iki>0 && (tumMetin[katarTut2+cumleUzunlugu]!=NULL)) { if(tumMetin[katarTut2+cumleUzunlugu]==" ") || (tumMetin[katarTut2+cumleUzunlugu]=="\n") || (tumMetin[katarTut2+cumleUzunlugu]==".") || (tumMetin[katarTut2+cumleUzunlugu]==",") { iki=iki-1; ilerisar=ilerisayac; } ilerisayac=ilerisayac+1; katarTut2++; } for(yaz=a-gerisar;yaz<(a+ilerisar);yaz++) {printf("%s",tumMetin[yaz]);} printf("Eski metinde bulunan cumle sirasi : %d\n\n",&a); printf("\n\nDegistirilmis metin : \n"); for(yaz=a-gerisar;yaz<a;yaz++) {printf("%s",tumMetin[yaz]);} printf("%s",yeniCumle); for(yaz=a;yaz<a+ilerisar;yaz++) {printf("%s",tumMetin[yaz]);} } } } } } } return kontrol2; } //============================================================================================================== -
Kocaeli üniversitesi pilot forum olarak tahribatı mı seçti bu sene ne yaptı :)
-
öyle oldu galiba :D eeee yokmu yardım edecek hayır sever?? yarın son gün YARDIMMM edinn!! :D
-
valla yardım etmek isterim de makinada 64 bit win7 var değişik sıkıntılara giriyor C compiler ....
Fakat gözle gördüğüm bir hatayı söyleyeyim katarTut2 diye değişkene a'yı atamışsın.Fakat yukarısında katarTut2 yi tanımlamamışsın..
116katarTut2=a; -
mstraker bunu yazdı:
-----------------------------
Kocaeli üniversitesi pilot forum olarak tahribatı mı seçti bu sene ne yaptı :)
-----------------------------Ben dicektim şimdi :D
Hep aynı soruları görüyorum..
Kodlarınızı ortalıkta vermeyin bence.. Sizde uygulaması var mı bilmiyorum ama bizde ödevler arası benzerlik yakalarlarsa direkt -100 veriyolar ödeve :|
PS:
Hocam senin çok çalışman gerek daha.. Bildiğim kadarı ile ödeviniz inputu konsoldan parametre olarak alacaktı. Sen program içinde alıyosun, ayrıca main fonksiyonun değer döndürmüyor ve getch() kullanıyosun.. Konsol uygulaması mantığına ters :))
-
mstraker bunu yazdı:
-----------------------------
valla yardım etmek isterim de makinada 64 bit win7 var değişik sıkıntılara giriyor C compiler ....
Fakat gözle gördüğüm bir hatayı söyleyeyim katarTut2 diye değişkene a'yı atamışsın.Fakat yukarısında katarTut2 yi tanımlamamışsın..
116katarTut2=a;
-----------------------------saol teşekkür ederim mstraker.ben bulmuştm bu hatayı da genede çözülmüyor sorun.galiba sonsuz döngüye giriyor..
-
NmC bunu yazdı:
-----------------------------
...
Kodlarınızı ortalıkta vermeyin bence.. Sizde uygulaması var mı bilmiyorum ama bizde ödevler arası benzerlik yakalarlarsa direkt -100 veriyolar ödeve :|
PS:
Hocam senin çok çalışman gerek daha.. Bildiğim kadarı ile ödeviniz inputu konsoldan parametre olarak alacaktı. Sen program içinde alıyosun, ayrıca main fonksiyonun değer döndürmüyor ve getch() kullanıyosun.. Konsol uygulaması mantığına ters :))
-----------------------------doğru söylüyorsun da bende ki projeyi düzeltebilecek düzeydeki adamın zaten bu kodlara ihtiyacı olmaz herhalde. aynı olursa kodları yazıp gönderdiğinde sadece kendisine değil bana da zararı dokunacağını biliyordur.yani öyle umuyorum :)
-
yine tahribattan bi birisine yazdigim kod var, azcik duzenle olayi cozersin ;-)
find_replace.h
#ifndef FIND_REPLACE_000 #define FIND_REPLACE_000 #pragma once #include <stdio.h> #include <conio.h> #include <tchar.h> #include <Windows.h> struct find_replace { const _TCHAR *fr_path; const _TCHAR *fr_find; const _TCHAR *fr_replace; }; #endif
stdafx.h#pragma once #include "targetver.h" #include "find_replace.h"
find_replace.cpp
#include "stdafx.h" #define PRIVATE static #define PUBLIC #undef MAX_PATH #define MAX_PATH 4096 PRIVATE void walk_dir_rec(int (*)(struct find_replace *), struct find_replace *); PRIVATE void walk_dir(const _TCHAR *, int (*)(struct find_replace *), struct find_replace *); PRIVATE int find_text(struct find_replace *); PRIVATE int replace_text(struct find_replace *); PRIVATE BOOL check_ext(const _TCHAR *); int _tmain(int argc, _TCHAR* argv[]) { struct find_replace fr; if (argc < 2) /*parametresiz olmaz.*/ return 0; if (!_tcscmp(argv[1], _T("-f")) && argc > 3)/*bul ;-)*/ { fr.fr_find = argv[3]; walk_dir(argv[2], find_text, &fr); } else if (!_tcscmp(argv[1], _T("-r")) && argc > 4)/*degistir.*/ { fr.fr_find = argv[3]; fr.fr_replace = argv[4]; walk_dir(argv[2], replace_text, &fr); } _getch(); return 0; } PRIVATE void walk_dir(const _TCHAR *p, int (*pfn)(struct find_replace *), struct find_replace *pfr) { SetCurrentDirectory(p); walk_dir_rec(pfn, pfr); } PRIVATE void walk_dir_rec(int (*pfn)(struct find_replace *), struct find_replace *pfr) { HANDLE hWlk; _TCHAR pwCurrent[MAX_PATH]; WIN32_FIND_DATA wfd; if (GetCurrentDirectory(2048, pwCurrent) < 0) return; if ((hWlk = FindFirstFile(_T("*.*"), &wfd)) == INVALID_HANDLE_VALUE) return; do { if ((wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))/*eger giris, bir dizinse*/ { if ( /*'.' veya '..' dizin'in kendisine ve bir ustune linkidir;-)*/ !_tcscmp(_T("."), wfd.cFileName) || !_tcscmp(_T(".."), wfd.cFileName) ) continue; SetCurrentDirectory(wfd.cFileName); walk_dir_rec(pfn, pfr); SetCurrentDirectory(pwCurrent); } else { if (!check_ext(wfd.cFileName)) /*sadece *.txt uzanti*/ continue; pfr->fr_path = wfd.cFileName; pfn(pfr); } } while (FindNextFile(hWlk, &wfd)); FindClose(hWlk); SetCurrentDirectory(pwCurrent); } PRIVATE int find_text(struct find_replace *pfr) { FILE *f; fpos_t pos; _TCHAR *buff; _TCHAR pwCurPath[MAX_PATH]; BOOL bl = TRUE; int len, i, line, lnlen; if (_tfopen_s(&f, pfr->fr_path, _T("r")) != 0) return -1; /******************************************** * burda dosya icinde pfr->fr_find aranicak * * eger bulunursa ekrana yazdiriilicak. * ********************************************/ fseek(f, 0, SEEK_END); fgetpos(f, &pos); fseek(f, 0, SEEK_SET); buff = (_TCHAR *)malloc((size_t)pos); // len = _tcslen(pfr->fr_find); for (line = 1; _fgetts(buff, (int)pos - 1, f) != NULL; ++line) { lnlen = _tcslen(buff); for (i = 0; i < lnlen - len; ++i) if (!_tcsncmp(buff + i, pfr->fr_find, len)) { if (bl){/*dizin ve dosya bilgisini bi kere bas;-)*/ GetCurrentDirectory(MAX_PATH, pwCurPath); _tprintf(_T("Dir:%s\nFile:%s\n\n"), pwCurPath, pfr->fr_path); bl = FALSE; } _tprintf(_T("Line:%d\nInd:%d\nLineText:%s\n"), line, i, buff); i += len; } } fclose(f); free(buff); return 0; } PRIVATE int replace_text(struct find_replace *pfr) { FILE *f; if (_tfopen_s(&f, pfr->fr_path, _T("r")) != 0) return -1; /**************************************************** * burda dosya icinde pfr->fr_find aranicak * * eger bulunursa pfr->fr_replace ile degistirilip * * dosyaya yazilicak ;-) * ****************************************************/ fclose(f); return 0; } /*uzanti kontrolu, yalnizca *.txt */ PRIVATE BOOL check_ext(const _TCHAR *p) { int len; _TCHAR buff[5]; len = _tcslen(p); if (len < 4) return FALSE; return towlower(*(p + len - 4)) == '.' && towlower(*(p + len - 3)) == 't' && towlower(*(p + len - 2)) == 'x' && towlower(*(p + len - 1)) == 't'; }
main fonksiyonunda da goruldugu uzere
-f parametresi ile arama -r ile ise degistirme fonksiyonlari ile walk_dir ordan da recursive dolasan walk_dir_rec cagriiliyo ;-)
sen bunu duzenleyip kendi kilifina uydurabilirsin. belki yarari dokunur ;-) -
GrN bunu yazdı:
-----------------------------......
main fonksiyonunda da goruldugu uzere
-f parametresi ile arama -r ile ise degistirme fonksiyonlari ile walk_dir ordan da recursive dolasan walk_dir_rec cagriiliyo ;-)
sen bunu duzenleyip kendi kilifina uydurabilirsin. belki yarari dokunur ;-)
-----------------------------çok sağol GrN. teşekkürlerr
