انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید


ارائه ۲۴٫۱۰ اوبونتو منتشر شد 🎉

نویسنده موضوع: جست و جو در متن  (دفعات بازدید: 3146 بار)

0 کاربر و 2 مهمان درحال مشاهده موضوع.

آفلاین سید وحید رضا برهانی

  • High Hero Member
  • *
  • ارسال: 1668
  • جنسیت : پسر
  • یک مخالف نرم افزار اوپن سورس
جست و جو در متن
« : 10 دی 1387، 04:06 ق‌ظ »
سلام
من یک کد(سی یا پایتون) می خواستم که بتونه :چند تا فایل متنی بگیره ویک فایل بده بیرون (اینجاش زیاد سخت نیست)حالا این چند تا فایلی رو که گرفت بره توش وشروع کنه به جست و جو به این صورت که کلمه ی اولی (هر کلمه بین دو تا فاصله قرار داره مثل زبان انگیسی به غیر از کلمه ی اولی!)رو در کل فایل های وارد شده دنبال کنه و بشماره و تا آخر روی همه ی کلمات همین کارو انجام بده و در آخر نتیجه ی کارو به صورت کلمه ی جست وجو شده و تعداد ان کلمه در یک فایلی ذخیره کنه تموم شد!!و یک چیز اگر مایل بودید توضیح کوچیکی هم بدید که بعدا" ازش سر در بیارم
ممنون
نرم افزاری که نشه سیخ انگولکش کرد (به هر دلیلی چه به‌خاطر قانون و چه پیچیدگی یا توسعه سریع)نرم افزار آزاد نیست حالا مهم نیست چه بنیادی یا چه افرادی اون رو نوشته باشند یا GPL باشه یانه!
نرم افزار آزاد یک جنبش هست نه یک تیکه کاغذ پاره(GPL)
حق فهمیدن از حق خوندن مهمتره

آفلاین فاراب

  • High Hero Member
  • *
  • ارسال: 1352
  • آزادی
    • پروفایل لینکداین
پاسخ به: جست و جو در متن
« پاسخ #1 : 10 دی 1387، 10:44 ب‌ظ »
همه‌ی اینها تابع داره. هم در C هم در اسکریپت.
Godisnowhere

آفلاین سید وحید رضا برهانی

  • High Hero Member
  • *
  • ارسال: 1668
  • جنسیت : پسر
  • یک مخالف نرم افزار اوپن سورس
پاسخ به: جست و جو در متن
« پاسخ #2 : 11 دی 1387، 03:05 ق‌ظ »
چه خوب می شه بیشتر بگه یا راهنمایی کنی یا مثال بزنی ؟
نرم افزاری که نشه سیخ انگولکش کرد (به هر دلیلی چه به‌خاطر قانون و چه پیچیدگی یا توسعه سریع)نرم افزار آزاد نیست حالا مهم نیست چه بنیادی یا چه افرادی اون رو نوشته باشند یا GPL باشه یانه!
نرم افزار آزاد یک جنبش هست نه یک تیکه کاغذ پاره(GPL)
حق فهمیدن از حق خوندن مهمتره

آفلاین mtux

  • Sr. Member
  • *
  • ارسال: 450
  • جنسیت : پسر
    • Mgroup
پاسخ به: جست و جو در متن
« پاسخ #3 : 11 دی 1387، 11:55 ق‌ظ »
به قول دوستان:
RTFM
و
google it
Free Software Advocate and Developer
http://mtux.wordpress.com
My GNU Affero page: http://rate.affero.net/mtux

آفلاین Behnam Golds

  • High Hero Member
  • *
  • ارسال: 1368
  • جنسیت : پسر
پاسخ به: جست و جو در متن
« پاسخ #4 : 11 دی 1387، 06:06 ب‌ظ »
یه نمونه سادشو برات نوشتم اینو نگاه کن ایده بگیر .چون گفتی با چند تا فایل مشکلی نداری این کد رو برای یک فایل ورودی نوشتم.
فرض من بر این بوده که حداکثر تعداد کلمات unique که در فایل استفاده شده 100 تاست. من برای ساختن دیکشنری از فایل استفاده نکردم و فقط یه بافر تعریف کردم اگر خواستی خودت عوضش کن. و حداکثر طول هر خط رو 100 کاراکتر با احتساب کاراکتر خط جدید در نظر گرفتم و  حداکثر طول هر کلمه 25 کاراکتر با احتساب NULL  .  جدا کننده های کلمات هم (n\,. )   یعنی  "نقطه کاما فاصله و کاراکتر خط جدید"
خروجی رو هم فقط روی صفحه نشون میده و توی فایل نریختم.


#include <string.h>
#include <stdio.h>
#define MAX_WORDS 100

void insertUW(char *string);
int searchUW(char *string);
void printUW(void);

int uwc=0;     //Keeps The Number Of Unique Words Already found.(Unique Word Counter)

struct uwss   //Unique Word Status Structure
  {       
   char uw[25];
   int no;
  }uws[MAX_WORDS];

int main(int argc,char *argv[])
  {
     FILE *in;
     if(argc > 1)
         {
            if((in = fopen(argv[1],"r"))==NULL)
               {
                  printf("The file  \"%s\" not found.\n",argv[1]);
                  return 0;
               }
         }
     else
        {
          printf("    Pleas enter a file name.\n");
          printf("    Usage: extract filename\n");
          return 0;
        }
     char string[100]; //Assume the maximum length of a line 100 characters
     const char delimiters[] = " .,\n"; //word delimiters
     char *token;

     while(fgets(string,100,in)!=NULL)
       {
          token = strtok (string, delimiters); 
     
          while(token!=NULL)
            {
               insertUW(token);
               token = strtok (NULL, delimiters);   

            }//end of while
       }//end of while
 
     printUW();
     return 0 ;
  }

void insertUW(char *string)
  {
     int index=searchUW(string);

     strncpy(uws[index].uw,string,25);
     uws[index].no++;
     if(index==uwc)
     uwc++;
  }

int searchUW(char *string)
  {
     int i;

     if(uwc!=0)
        for(i=0;i<uwc;i++)
           if((strncmp(uws[i].uw,string,25))==0)
              return i;//end of if-for-if

     return uwc;
  }

void printUW(void)
  {
     int i,j;

     for(i=0;i<uwc;i++)
        {
           printf("------------------------------------\n");
           printf("%d) %s     ",i+1,uws[i].uw);

           for(j=0;j<(26-strlen(uws[i].uw));j++)
              printf(" ");//end of for

           printf("(%d)\n",uws[i].no);
        }//end of for
  }



نمونه فایل ورودی :
behnam@ubuntu:~/Desktop/fdg$ cat c.txt
ubuntu,linux.ubuntu iran ubuntu linux
     . ..  .. ,, , ,  ubuntu  linux  behnam

behnam iran,linux.

نتیجه :
behnam@ubuntu:~/Desktop/fdg$ ./extract c.txt
------------------------------------
1) ubuntu                         (4)
------------------------------------
2) linux                          (4)
------------------------------------
3) iran                           (2)
------------------------------------
4) behnam                         (2)
« آخرین ویرایش: 11 دی 1387، 06:10 ب‌ظ توسط Behnam Golds »

آفلاین سید وحید رضا برهانی

  • High Hero Member
  • *
  • ارسال: 1668
  • جنسیت : پسر
  • یک مخالف نرم افزار اوپن سورس
پاسخ به: جست و جو در متن
« پاسخ #5 : 12 دی 1387، 02:04 ق‌ظ »
ممنون برم کامپایل کنم ببینم چی می شه
نرم افزاری که نشه سیخ انگولکش کرد (به هر دلیلی چه به‌خاطر قانون و چه پیچیدگی یا توسعه سریع)نرم افزار آزاد نیست حالا مهم نیست چه بنیادی یا چه افرادی اون رو نوشته باشند یا GPL باشه یانه!
نرم افزار آزاد یک جنبش هست نه یک تیکه کاغذ پاره(GPL)
حق فهمیدن از حق خوندن مهمتره

آفلاین Behnam Golds

  • High Hero Member
  • *
  • ارسال: 1368
  • جنسیت : پسر
پاسخ به: جست و جو در متن
« پاسخ #6 : 12 دی 1387، 09:45 ق‌ظ »
خواهش میکنم.منتظر نتیجه هستم.

آفلاین سید وحید رضا برهانی

  • High Hero Member
  • *
  • ارسال: 1668
  • جنسیت : پسر
  • یک مخالف نرم افزار اوپن سورس
پاسخ به: جست و جو در متن
« پاسخ #7 : 14 دی 1387، 04:09 ق‌ظ »
سلام یک جاشو نمی فهمم  :اون صده مگه تعداد کلمات متفاوت رو تعیین نمی کنه (پس باید تو نتایجش از 100 کلمه بیشتر نداشته باشه در حالی که در بعضی فایل ها بیشتر میشه؟)و یک چیز دیگه چرا وقتی 100 رو می کنه 300 کلا" خرو جیش بهم می ریزه؟(پیچیده تر از اونی بود که فکر می کردم)
نرم افزاری که نشه سیخ انگولکش کرد (به هر دلیلی چه به‌خاطر قانون و چه پیچیدگی یا توسعه سریع)نرم افزار آزاد نیست حالا مهم نیست چه بنیادی یا چه افرادی اون رو نوشته باشند یا GPL باشه یانه!
نرم افزار آزاد یک جنبش هست نه یک تیکه کاغذ پاره(GPL)
حق فهمیدن از حق خوندن مهمتره

آفلاین Behnam Golds

  • High Hero Member
  • *
  • ارسال: 1368
  • جنسیت : پسر
پاسخ به: جست و جو در متن
« پاسخ #8 : 14 دی 1387، 04:25 ق‌ظ »
خوب برای اینکه من کنترل نکردم که اگر خواست از 100  بیشتر  بشه برنامه چه عکس العملی نشون بده و چون داریم از اشاره گر (همون اسم آرایه)  استفاده می کنیم در محدوده هایی نوشته میشه که مجاز نیست. میتونی با یه if  مقدار uwc  رو با 100  مقایسه کنی و در صورت رسیدن به 100 از حلقه while  بیای بیرون. من 100   رو به 300  هم تغییر دادم ولی مشکلی نبود! دقیق تر توضیح بده و خروجی بذار .

آفلاین سید وحید رضا برهانی

  • High Hero Member
  • *
  • ارسال: 1668
  • جنسیت : پسر
  • یک مخالف نرم افزار اوپن سورس
پاسخ به: جست و جو در متن
« پاسخ #9 : 15 دی 1387، 05:35 ق‌ظ »
سلام نمی دونم چرا ولی تو ویندوز کامپایل کردم وهیچ مشکلی نداشت
نرم افزاری که نشه سیخ انگولکش کرد (به هر دلیلی چه به‌خاطر قانون و چه پیچیدگی یا توسعه سریع)نرم افزار آزاد نیست حالا مهم نیست چه بنیادی یا چه افرادی اون رو نوشته باشند یا GPL باشه یانه!
نرم افزار آزاد یک جنبش هست نه یک تیکه کاغذ پاره(GPL)
حق فهمیدن از حق خوندن مهمتره

آفلاین Behnam Golds

  • High Hero Member
  • *
  • ارسال: 1368
  • جنسیت : پسر
پاسخ به: جست و جو در متن
« پاسخ #10 : 15 دی 1387، 12:07 ب‌ظ »
 :o   نمیدونم والا  من تو اوبونتو و سوزه کامپایل کردم مشکلی پیش نیومد...

آفلاین سید وحید رضا برهانی

  • High Hero Member
  • *
  • ارسال: 1668
  • جنسیت : پسر
  • یک مخالف نرم افزار اوپن سورس
پاسخ به: جست و جو در متن
« پاسخ #11 : 16 دی 1387، 02:31 ق‌ظ »
سلام این خروجی رو نگاه کن فایل ورودیش سورس برنامه است
http://negarsoft.persiangig.com/q.txt
نرم افزاری که نشه سیخ انگولکش کرد (به هر دلیلی چه به‌خاطر قانون و چه پیچیدگی یا توسعه سریع)نرم افزار آزاد نیست حالا مهم نیست چه بنیادی یا چه افرادی اون رو نوشته باشند یا GPL باشه یانه!
نرم افزار آزاد یک جنبش هست نه یک تیکه کاغذ پاره(GPL)
حق فهمیدن از حق خوندن مهمتره

آفلاین Behnam Golds

  • High Hero Member
  • *
  • ارسال: 1368
  • جنسیت : پسر
پاسخ به: جست و جو در متن
« پاسخ #12 : 16 دی 1387، 12:03 ب‌ظ »
فکر کنم  تفاوت در کد اسکی کاراکتر خط جدید در ویندوز و لینوکس باشه ، خروجی برای من اینطوریه :

1) #include                       (2)
------------------------------------
2) <string                        (1)
------------------------------------
3) h>                             (2)
------------------------------------
4) <stdio                         (1)
------------------------------------
5) #define                        (1)
------------------------------------
6) MAX_WORDS                      (1)
------------------------------------
7) 300                            (1)
------------------------------------
8) void                           (4)
------------------------------------
9) insertUW(char                  (2)
------------------------------------
10) *string);                      (2)
------------------------------------
11) int                            (8)
------------------------------------
12) searchUW(char                  (2)
------------------------------------
13) printUW(void);                 (1)
------------------------------------
14) uwc=0;                         (1)
------------------------------------
15) //Keeps                        (1)
------------------------------------
16) The                            (1)
------------------------------------
17) Number                         (1)
------------------------------------
18) Of                             (1)
------------------------------------
19) Unique                         (1)
------------------------------------
20) Words                          (1)
------------------------------------
21) Already                        (1)
------------------------------------
22) found                          (2)
------------------------------------
23) (Unique                        (1)
------------------------------------
24) Word                           (2)
------------------------------------
25) Counter)                       (1)
------------------------------------
26) struct                         (1)
------------------------------------
27) uwss                           (1)
------------------------------------
28) //Unique                       (1)
------------------------------------
29) Status                         (1)
------------------------------------
30) Structure                      (1)
------------------------------------
31) {                              (11)
------------------------------------
32) char                           (5)
------------------------------------
33) uw[25];                        (1)
------------------------------------
34) no;                            (1)
------------------------------------
35) }uws[MAX_WORDS];               (1)
------------------------------------
36) main(int                       (1)
------------------------------------
37) argc                           (1)
------------------------------------
38) *argv[])                       (1)
------------------------------------
39) FILE                           (1)
------------------------------------
40) *in;                           (1)
------------------------------------
41) if(argc                        (1)
------------------------------------
42) >                              (1)
------------------------------------
43) 1)                             (1)
------------------------------------
44) if((in                         (1)
------------------------------------
45) =                              (4)
------------------------------------
46) fopen(argv[1]                  (1)
------------------------------------
47) "r"))==NULL)                   (1)
------------------------------------
48) printf("The                    (1)
------------------------------------
49) file                           (2)
------------------------------------
50) \"%s\"                         (1)
------------------------------------
51) not                            (1)
------------------------------------
52) \n"                            (1)
------------------------------------
53) argv[1]);                      (1)
------------------------------------
54) return                         (5)
------------------------------------
55) 0;                             (2)
------------------------------------
56) }                              (7)
------------------------------------
57) else                           (1)
------------------------------------
58) printf("                       (3)
------------------------------------
59) Pleas                          (1)
------------------------------------
60) enter                          (1)
------------------------------------
61) a                              (2)
------------------------------------
62) name                           (1)
------------------------------------
63) \n");                          (1)
------------------------------------
64) Usage:                         (1)
------------------------------------
65) extract                        (1)
------------------------------------
66) filename\n");                  (1)
------------------------------------
67) string[100];                   (1)
------------------------------------
68) //Assume                       (1)
------------------------------------
69) the                            (1)
------------------------------------
70) maximum                        (1)
------------------------------------
71) length                         (1)
------------------------------------
72) of                             (6)
------------------------------------
73) line                           (1)
------------------------------------
74) 100                            (2)
------------------------------------
75) characters                     (1)
------------------------------------
76) const                          (1)
------------------------------------
77) delimiters[]                   (1)
------------------------------------
78) "                              (2)
------------------------------------
79) \n";                           (1)
------------------------------------
80) //word                         (1)
------------------------------------
81) delimiters                     (1)
------------------------------------
82) *token;                        (1)
------------------------------------
83) while(fgets(string             (1)
------------------------------------
84) in)!=NULL)                     (1)
------------------------------------
85) token                          (2)
------------------------------------
86) strtok                         (2)
------------------------------------
87) (string                        (1)
------------------------------------
88) delimiters);                   (2)
------------------------------------
89) while(token!=NULL)             (1)
------------------------------------
90) insertUW(token);               (1)
------------------------------------
91) (NULL                          (1)
------------------------------------
92) }//end                         (3)
------------------------------------
93) while                          (2)
------------------------------------
94) printUW();                     (1)
------------------------------------
95) 0                              (1)
------------------------------------
96) ;                              (1)
------------------------------------
97) *string)                       (2)
------------------------------------
98) index=searchUW(string);        (1)
------------------------------------
99) strncpy(uws[index]             (1)
------------------------------------
100) uw                             (2)
------------------------------------
101) string                         (2)
------------------------------------
102) 25);                           (1)
------------------------------------
103) uws[index]                     (1)
------------------------------------
104) no++;                          (1)
------------------------------------
105) if(index==uwc)                 (1)
------------------------------------
106) uwc++;                         (1)
------------------------------------
107) i;                             (1)
------------------------------------
108) if(uwc!=0)                     (1)
------------------------------------
109) for(i=0;i<uwc;i++)             (2)
------------------------------------
110) if((strncmp(uws[i]             (1)
------------------------------------
111) 25))==0)                       (1)
------------------------------------
112) i;//end                        (1)
------------------------------------
113) if-for-if                      (1)
------------------------------------
114) uwc;                           (1)
------------------------------------
115) printUW(void)                  (1)
------------------------------------
116) i                              (1)
------------------------------------
117) j;                             (1)
------------------------------------
118) printf("-----------------      (1)
------------------------------------
119) printf("%d)                    (1)
------------------------------------
120) %s                             (1)
------------------------------------
121) i+1                            (1)
------------------------------------
122) uws[i]                         (2)
------------------------------------
123) uw);                           (1)
------------------------------------
124) for(j=0;j<(26-strlen(uws[      (1)
------------------------------------
125) uw));j++)                      (1)
------------------------------------
126) ");//end                       (1)
------------------------------------
127) for                            (2)
------------------------------------
128) printf("(%d)\n"                (1)
------------------------------------
129) no);                           (1)


میتونی توی گوگل بگردی ، این رو ببین :
http://www.linuxforums.org/forum/misc/112428-new-line-character-windows-linux.html

با notepad  که فایل رو باز میکنی تمام خطوط رو با هم ترکیب میکنه ؟ اگر اینطوریه  فکر کنم با ورد آفیس یا اپن آفیس خودمون بازش کنی اولش یه پیغام برای تبدیل فرمت بهت بده . همونی که چند تا گزینه CR  و CR&LF  و LF  بهت میده. یا اینکه خودت دستی درستش کنی.

آفلاین سید وحید رضا برهانی

  • High Hero Member
  • *
  • ارسال: 1668
  • جنسیت : پسر
  • یک مخالف نرم افزار اوپن سورس
پاسخ به: جست و جو در متن
« پاسخ #13 : 17 دی 1387، 03:50 ق‌ظ »
تو ویندوز دزست عمل می کنه فقط در لینوکس مشکل داره(اونم وقتی که عدده از 100 بیشتر می شه)
نرم افزاری که نشه سیخ انگولکش کرد (به هر دلیلی چه به‌خاطر قانون و چه پیچیدگی یا توسعه سریع)نرم افزار آزاد نیست حالا مهم نیست چه بنیادی یا چه افرادی اون رو نوشته باشند یا GPL باشه یانه!
نرم افزار آزاد یک جنبش هست نه یک تیکه کاغذ پاره(GPL)
حق فهمیدن از حق خوندن مهمتره

آفلاین Behnam Golds

  • High Hero Member
  • *
  • ارسال: 1368
  • جنسیت : پسر
پاسخ به: جست و جو در متن
« پاسخ #14 : 17 دی 1387، 04:06 ق‌ظ »
این خروجی که گذاشتم رو توی اوبونتو گرفتم و همونطور که میبینی عدد هم از 100 بیشتر شده البته من مقدار ماکزیمم رو به 300 تغییر دادم.  حالا زیاد در بند این کد نباش ، اینو  همینطوری نوشتم که ازش ایده بگیری و کد خودتو بنویسی ، این کد خیلی اشکالات داره حداقل اگر نمیخوای یکی دیگه بنویسی سعی کن همین رو رفع اشکال کنی.و سعی کنی بهینه بکنیش. اگر در مورد منطق برنامه مشکل داشته باشی در خدمتم.