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

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

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


توزیع گنو/لینوکس اوبونتو ۲۰ ساله شد 🎉

نویسنده موضوع: درخواست : استخراج عبارت از توی متن [ حل شد ]  (دفعات بازدید: 1910 بار)

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

آفلاین #elahe#

  • Full Member
  • *
  • ارسال: 212
  • جنسیت : دختر
سلام
من یه فایل xml دارم
چند هزار خط کد هستش
هر 10-20 خط یه سطری هست به این صورت   
<Tag>phrase</Tag>البته این phrase متغیر هست و این کد رو به عنوان مثال عرض کردم
من میخوام این phrase ها رو از این فایل استخراج کنم

البته اومدم از تو notepad ++ عبارت <Tag> رو سرچ کردم و همه این سطرها رو واسم آورد
اومدم تگها رو توسط همین notepad ++ حذف کنم دیدم شماره سطرها هم هستند و باید دونه دونه حذفشون کنم
مثل این :
Line 222:     <Tag>phrase1</Tag>
Line 241:     <Tag>phrase2</Tag>
Line 260:     <Tag>phrase3</Tag>
Line 279:     <Tag>phrase4</Tag>
Line 298:     <Tag>phrase5</Tag>
Line 317:     <Tag>phrase6</Tag>
اون شماره سطرها مزاحم کارم شدند

واسه همین دست به دامان کدنویسی شدم
یه کدی میخوام که عبارتهای داخل تگ Tag رو واسم استخراج کنه
مرسی
« آخرین ویرایش: 08 تیر 1393، 02:39 ب‌ظ توسط #elahe# »

آفلاین Ghost Shadow

  • High Hero Member
  • *
  • ارسال: 1803
  • جنسیت : پسر
  • Linux is Secured By Design

آفلاین جادی

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 1610
    • در دفاع از آزادی بیان
پاسخ : درخواست : استخراج عبارت از توی متن
« پاسخ #2 : 08 تیر 1393، 09:45 ق‌ظ »
منطقا باید بتونی بسیار راحت با regexها خطوط و اطلاعاتی که می خوای رو پیدا کنی. ولی بدون داشتن فایل دقیق (حداقل قسمت قابل قبولی از اون) نمی شه نظر داد. دستور grep به راحتی جواب می ده و اگر می خوای فایل یا یک بخش خوبی اش رو بفرست که بشه نوشت کد رو.
آزادی کیبورد حق هر انسان است - جادی

آفلاین جادی

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 1610
    • در دفاع از آزادی بیان
پاسخ : درخواست : استخراج عبارت از توی متن
« پاسخ #3 : 08 تیر 1393، 09:46 ق‌ظ »
البته اینم بگم که روش درست تر از نظر برنامه نویسی، نوشتن یک برنامه کوچیک است که واقعا ایکس ام ال رو بفهمه و چیزی که می خوای رو نشون بده.
آزادی کیبورد حق هر انسان است - جادی

آفلاین #elahe#

  • Full Member
  • *
  • ارسال: 212
  • جنسیت : دختر
پاسخ : درخواست : استخراج عبارت از توی متن
« پاسخ #4 : 08 تیر 1393، 02:36 ب‌ظ »
مرسی از دوستان
با عبارات منظم حلش کردم
تو پی اچ پی
'#^\s*<tag>(.*?)</tag>$#im'
و راحت تر از اون تو spreadsheet هم تونستم تگها رو استخراج کنم

آفلاین #elahe#

  • Full Member
  • *
  • ارسال: 212
  • جنسیت : دختر
پاسخ : درخواست : استخراج عبارت از توی متن
« پاسخ #5 : 08 تیر 1393، 09:17 ب‌ظ »
البته اینم بگم که روش درست تر از نظر برنامه نویسی، نوشتن یک برنامه کوچیک است که واقعا ایکس ام ال رو بفهمه و چیزی که می خوای رو نشون بده.
جادی همه یا حداقل اکثر زبانهای برنامه نویسی کلاس(های)ی واسه کار با xml دارند

آفلاین احمد حمزه ئی

  • Jr. Member
  • *
  • ارسال: 66
  • جنسیت : پسر
    • Github
پاسخ : درخواست : استخراج عبارت از توی متن
« پاسخ #6 : 10 تیر 1393، 10:50 ق‌ظ »
البته اینم بگم که روش درست تر از نظر برنامه نویسی، نوشتن یک برنامه کوچیک است که واقعا ایکس ام ال رو بفهمه و چیزی که می خوای رو نشون بده.

سلام
ببخشید که من پس از حل شدن موضوع پاسخ ارسال می‌کنم.
سعی کردم با سی یه برنامه کوچیک برای این کار بنویسم:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

//max line length for reading
#define LINE_LENGTH 800

int main(int argc, char *argv[])
{
  FILE *file;
  char line[LINE_LENGTH];
  char *begin, *end, *i;
 
  //check if we have 2 args
  if (argc != 2)
  {
    fprintf(stderr, "Invalid arguments.");
    exit(EXIT_FAILURE);
  }
 
  //use first arg as file address
  file = fopen(argv[1], "r");
 
  //read the file and search for lines with <Tag>
  while (fgets(line, LINE_LENGTH, file) != NULL)
    if (strstr(line,"<Tag>") != NULL && strstr(line,"</Tag>") != NULL)
    {
      //find beginning & end of the phrase
      begin = strstr(line, "<Tag>") + 5;
      end = strstr(line, "</Tag>");
      //print the phrase
      for (i = begin ; i < end ; i++)
        putchar(*i);
      //print a new line after each phrase
      printf("\n");
    }
 
  fclose(file);

  return(EXIT_SUCCESS);
}

این برنامه فایل رو خط به خط میخونه. (تا سقف ۸۰۰ کاراکتر یرای هر خط)
بعد دنبال خط‌هایی می‌گرده که دارای عبارت‌های <Tag> و </Tag> باشند.
وقتی خط رو پیدا کرد کاراکترهایی که بین این دو عبارت هستند رو چاپ می‌کنه.

مثلا فایل xml ما به این صورت هست:
ansa<Tag>salam</Tag> fdf
s
<Tag>ahmad</Tag>cc

برای استفاده، متن برنامه رو توی یه فایل به اسم find.c ذخیره کنید.
و سپس:
ahmad@ahmad-desktop:~/test$ gcc find.c -o find
ahmad@ahmad-desktop:~/test$ ./find new.xml
salam
ahmad

همچنین می‌تونید خروجی رو به یک فایل تغییر بدید تا عبارت‌ها توی اون فایل ذخیره بشه:
./find new.xml >output

آفلاین #elahe#

  • Full Member
  • *
  • ارسال: 212
  • جنسیت : دختر
ممنون جناب حمزه ای
عالی بود
البته تست نکردم هنوز کدتون رو
به غیز از بار آموزشیش حتمن واسم به درد خواهد خورد
مرسی

آفلاین جادی

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 1610
    • در دفاع از آزادی بیان
پاسخ : درخواست : استخراج عبارت از توی متن
« پاسخ #8 : 15 تیر 1393، 08:31 ق‌ظ »
البته اینم بگم که روش درست تر از نظر برنامه نویسی، نوشتن یک برنامه کوچیک است که واقعا ایکس ام ال رو بفهمه و چیزی که می خوای رو نشون بده.
جادی همه یا حداقل اکثر زبانهای برنامه نویسی کلاس(های)ی واسه کار با xml دارند

بله بدون شک. منم نگفتم ایکس ام ال رو شخصا پارز کنی. منظورم این بود که به جای رجکس ها با یک برنامه کوچیک واقعا ایکس ام ال رو بخونی و بخش های مورد نظر رو جدا کنی.
آزادی کیبورد حق هر انسان است - جادی