PDA

View Full Version : خواندن کلمه به کلمه یک رشته در یک فایل نوشتاری



shiva_h
یک شنبه 01 اردیبهشت 1387, 11:39 صبح
سلام

من می خوام محتوای یک فایل text رو بخونم که حاوی یک رشته هست .
حالا می خوام تعداد تکرار هر کدوم از کلمات این رشته رو پیدا کنم .
نمی دونم چه کدی بنوسیسم یا چه جور کلمه به کلمه محتوای فایل رو بخونم .

می شه لطفاً راهنمایی کنید ؟

ICEMAN
یک شنبه 01 اردیبهشت 1387, 12:07 عصر
سلام ...
برای خوندنن فایل که فکر نمی کنم مشکلی داشته باشی پس تا اینجا یه رشته داریم
می تونی این رشته رو کاراکتر به کاراکتر بخونی تا '\32' که کد space باشه (به فرض اینکه کلمه ها با SPACE از هم جدا شده باشه)
تا اینجا یه کلمه رو خوندی برای اینکه کلمه های بعدی رو بخونه شمارنده رو + 1 کن که از SPACE رد بشه و دوباره کاراکتر ها رو بخون

موفق باشی

shiva_h
یک شنبه 01 اردیبهشت 1387, 12:44 عصر
ممنون از جوابتون من این کد رو نوشتم به نظر شما درسته؟
تعریف آرایه ای از رشته ها و استفاده از دستور سفقفخن رو درست انجام دادم؟


char * Str;Char *p_arr[] I=0; fseek (InFile, 0 , SEEK_END); lSize = ftell (InFile); rewind (InFile); fread (buffer,1,lSize,pFile); Str = strtok (str," "); while (Str!= NULL) { p_arr[i]= Str; Str = strtok (NULL, " "); i++; }

shiva_h
یک شنبه 01 اردیبهشت 1387, 12:50 عصر
نمی دونم پرا فونتش ریخت بهم .
char * Str;


char *p_arr[];
fseek (InFile, 0 , SEEK_END); lSize = ftell (InFile); rewind (InFile); fread (buffer,1,lSize,pFile); Str = strtok (str," "); while (Str!= NULL) { p_arr[i]= Str; Str = strtok (NULL, " "); }
)

emad_67
یک شنبه 01 اردیبهشت 1387, 13:56 عصر
برای خوندن کلمه به کلمه فایل نیازی به چک کردن space و این چیزا نیست.
به این شکل بنویس:


#include <iostream.h>
#include <fstream.h>

void main()
{
ifstream in("test.txt",ios::in);
char s[20];
while(!in.eof())
{
in>>s;
cout<<s<<endl;
}
}
عملگر << خودش تا space جریان ورودی رو میخونه.
شما کدت رو توی تگ کد قرار بده تا اینجوری بهم نریزه.

shiva_h
یک شنبه 01 اردیبهشت 1387, 14:31 عصر
این کد من درست هست؟ تعریف آرایه من درسته؟

می خوام کلمات فایل رو داخا آرایه ذخیره کنه


#include <iostream.h>#include <fstream.h>void main(){char *p_arr[]; int i=; ifstream in("test.txt",ios::in); char s[20]; while(!in.eof()) { in>>s;p_arr[i]=s; i++; }

_alish_
یک شنبه 01 اردیبهشت 1387, 15:23 عصر
با عرض سلام



#include <stdio.h>
#include <stdlib.h>
#define MAX_LENGTH 256
main(int argc, char *argv[])

{
char inword[MAX_LENGTH];
int word_count = 0;
FILE *infile;
if (argc < 2)

{
printf("Format : wordcnt <filename>\n");
exit( 1 );
}
/* open the infile */
if ((infile = fopen( argv[1], "rt" )) == NULL)

{
printf("Cannot open input file - %s\n", argv[1] );
exit( 1 );
}
/* read the string and count it while not end of file */
while( !feof(infile) )

{
fscanf( infile, "%s", inword );
word_count++;
}

/* print the result */
printf( "There are %d word(s) in the file %s\n", word_count, argv[1] );
/* close the infile */
fclose(infile);
return(0);
}

به یاد جونی
فقط به exe باید مسیر فایل بدی، یا بجای *argv یه مسیر فایل تعریف کن

shiva_h
یک شنبه 01 اردیبهشت 1387, 19:49 عصر
ببخشید که باز سوال می پرسم.

اگه بخوام تک تک کلمه ها رو در یک آرایه ذخیره کنم یعنی هر کلمه در یک خونه از آرایه . می شه راهنمایی کنید چه کدی بنویسم ؟ چون نیاز دارم که تعداد تکرار هر کلمه از آرایه رو بدست بیاورم .

emad_67
یک شنبه 01 اردیبهشت 1387, 22:15 عصر
اگه بخوام تک تک کلمه ها رو در یک آرایه ذخیره کنم یعنی هر کلمه در یک خونه از آرایه . می شه راهنمایی کنید چه کدی بنویسم ؟ چون نیاز دارم که تعداد تکرار هر کلمه از آرایه رو بدست بیاورم .همون کدی که توی 2 تا پست قبلیت نوشتی درسته تقریبا فقط اینجوری بنویس:


#include <iostream.h>
#include <fstream.h>
void main()
{
char *p_arr[10];
int i=0;
ifstream in("test.txt",ios::in);
char *s;
while(!in.eof())
{
s=new char [20];
in>>s;
p_arr[i]=s;
i++;
}
}
یعنی اشاره گر s رو داخل حلقه تخصیص حافظه کن. و برای آرایه p_arr هم حتما باید طول در نظر بگیری.

shiva_h
دوشنبه 02 اردیبهشت 1387, 10:00 صبح
سلام به همگی

وقتی دستور

while( !feof(infile) )

برای رسیدن به انتهای فایل رو می نویسم برنامه ام هنگ می کنه . چی کار کنم برای این شرط؟

می شه بگم تا مادامی که آخرین کاراکتر فایل enter هست برو از فایلت بخون؟

inter رو چه جور معرفی کنم؟

نمی دونم چرا دستور بالا موجب هنگ کردن برنامم می شه .

emad_67
سه شنبه 03 اردیبهشت 1387, 11:00 صبح
می شه بگم تا مادامی که آخرین کاراکتر فایل enter هست برو از فایلت بخون؟
اینجوری نمیشه درست برنامه رو نوشت چون ممکنه وسط متن یه جایی enter خورده باشه ولی انتهای فایل نباشه. شما برنامت رو بزار تا شاید بشه فهمید که مشکلش چیه یا اگه برنامت طولانیه یه مثالی کوچیکی در مورد همین هنگ کردن بزار.

radium
چهارشنبه 04 اردیبهشت 1387, 19:02 عصر
دوست عزیز این کارو بکن توی یه حلقه بینهایت با همون دستوری که دوستمون نوشتن کلمه ها رو بخون و دستور زیر باعث میشه وقتی فایلت تموم شد از حلقه میاد بیرون.
در ضمن برای اینکه تعداد هر کلمه رو بشماری هم چند تا راه داری بهتره تخصیص پویا باشه.


if (fin.fail())
break;

jalil_m
سه شنبه 11 تیر 1387, 03:40 صبح
ببخشید که باز سوال می پرسم.

اگه بخوام تک تک کلمه ها رو در یک آرایه ذخیره کنم یعنی هر کلمه در یک خونه از آرایه . می شه راهنمایی کنید چه کدی بنویسم ؟ چون نیاز دارم که تعداد تکرار هر کلمه از آرایه رو بدست بیاورم .


دوست عزيز ، براي اينكار راحت تره كه از تابع strtok استفاده كني كه تو هدرفايل string.h هست و بر اساس يه كاراكتر (كه اينجا Space) هست رشته را به چند تكه تقسيم ميكنه و يه آرايه از كلمات برميگردونه.