PDA

View Full Version : سوال: جستجوی سرتیتر ها و کپی کردن کاراکتر های خاصی از هر سر تیتر از یک فایل متنی



vahidpro
پنج شنبه 07 خرداد 1388, 19:00 عصر
من یک فایل متنی دارم که حاوی اطلاعاتی شبیه اطلاعات زیر می باشد

ENSG00321 Gene_ch19<

AATAGCGGTTAACATATTAATTAAACTAATGTATAGATATTATCCGCTTC CAGATTTATTATTTTGTAAA

ATAGGCACAGTTCTTATCTGGTGTCACTTTATGCTTTTTTAATAGACGCC CAGCTCTACTCATGGCCAAG

.

.

ENSG00531 Gene_ch5<

AAAGAAGCGTAGGCCCGCCATGCAGCGTAAAAAGGATAATGCGGAGCAGC GGTCCCCAAAGACTGATTTA

TCAAAACTGTTTTCGCAGCAATTAACACACCCACCGACCAGTAACACCGC TGCAAGCAAGGCCACGGGCA

.

.

من Header هایی دارم شبیه ENSG00321.
من میخواهم در فایل متنی هر یک از این Header ها را پیدا کنم و بعد از توالی که از زیر هر Header شروع می شود از یک کاراکتر خاصی مثلاً پنجم شروع کرده و تا چندین کاراکتر بعدی را مثلاً 112 کاراکتر بعد از کاراکتر پنچم را خوانده و کپی کنم و در یک فایل دیگری ذخیره کنم.
من چگونه باید این برنامه را در محیط ++C یا MATLAB بنویسم؟

tdkhakpur
پنج شنبه 07 خرداد 1388, 20:13 عصر
سلام
تابع زیر رو دستی برات کدش رو قرار دادم اگه ایرادی دستوری داشت رفعش کن این تابع محل هدر شما رو داخل فایل (اگه پیداش کرد مقدار true برگردونده میشه)نگه میداره با دستور ftell هم میتونی این مکان رو بدست بیاری.
ولی اگه با fread یا fget میخواهید متن های بعدی رو بخونید بعد از این تابع میتوانید استفاده کنید.


bool FindHeader( char *HeaderName, FILE *fp)
{
char *ptr;
int c, len;
bool Find=false;
len = strlen(HeaderName);
ptr = new char [len];
ptr[0] =0;
while( !Find && !feof(fp) )
{
if( strlen(ptr) == len && strcmp(ptr, HeaderName)==0)
Find = true;
if( strlen(ptr) == len ){
strcpy(ptr, &ptr[1]);
c --;
}
ptr[c++] = fgetc(fp);
}
delete [] ptr;
return Find;
}

کارهای بعدی شما فقط خوندن داده هست.
باز مشکلی بود ارسال کن.
موفق باشید.

vahidpro
پنج شنبه 07 خرداد 1388, 20:29 عصر
ممنون از محبت شما
من در کاراکتر به کاراکترخواندنش و رسیدن به کاراکتر شروع (start) مورد نظر مثلاً پنجم و بعد خواندن چندین کاراکتر مشخص (size to read) بعد از کاراکتر پنجم هم مشکل دارم. چون در ++C مبتدی هستم اگر راهنمایی کنید بسیار ممنون خواهم شد.
بنده آدرس هم کاراکتر شروع و تعداد کاراکتری که باید بعد از کاراکتر شروع خوانده شود را برای هر سرتیتر دارم.

vahidpro
پنج شنبه 07 خرداد 1388, 20:32 عصر
سلام
تابع زیر رو دستی برات کدش رو قرار دادم اگه ایرادی دستوری داشت رفعش کن این تابع محل هدر شما رو داخل فایل (اگه پیداش کرد مقدار true برگردونده میشه)نگه میداره با دستور ftell هم میتونی این مکان رو بدست بیاری.
ولی اگه با fread یا fget میخواهید متن های بعدی رو بخونید بعد از این تابع میتوانید استفاده کنید.


bool FindHeader( char *HeaderName, FILE *fp)
{
char *ptr;
int c, len;
bool Find=false;
len = strlen(HeaderName);
ptr = new char [len];
ptr[0] =0;
while( !Find && !feof(fp) )
{
if( strlen(ptr) == len && strcmp(ptr, HeaderName)==0)
Find = true;
ptr[c++] = fgetc(fp);
}
delete [] ptr;
return Find;
}
کارهای بعدی شما فقط خوندن داده هست.
باز مشکلی بود ارسال کن.
موفق باشید.
ممنون هم شهری من هم از خوی هستم

tdkhakpur
جمعه 08 خرداد 1388, 14:52 عصر
سلام
بیبنید یک تابع به اسم fssek هست که گزینه های مختلفی رو برای پارامترهاش میگیره.
شما برای اینگه ا محل جاری مقعیت پنجم از اون محل برید فکر کنم به روش زیر هست.
ولی اگه اشتبا شده باشه خودت اصلاحش کن چون گزینه هاش تقریبا یادم نیست.


fssek(fp , 5, 1);

در ضمن به شما همشهری عزیزم هم سلام و عرض ادب دارم.