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

کمک و پشتیبانی => برنامه‌سازی => نویسنده: #elahe# در 08 تیر 1393، 12:32 ق‌ظ

عنوان: درخواست : استخراج عبارت از توی متن [ حل شد ]
ارسال شده توسط: #elahe# در 08 تیر 1393، 12:32 ق‌ظ
سلام
من یه فایل 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 رو واسم استخراج کنه
مرسی
عنوان: پاسخ : درخواست : استخراج عبارت از توی متن
ارسال شده توسط: Ghost Shadow در 08 تیر 1393، 01:00 ق‌ظ
این فکر کنم بتونه کمکت کنه:

https://stackoverflow.com/questions/2222150/extraction-of-data-from-a-simple-xml-file
عنوان: پاسخ : درخواست : استخراج عبارت از توی متن
ارسال شده توسط: جادی در 08 تیر 1393، 09:45 ق‌ظ
منطقا باید بتونی بسیار راحت با regexها خطوط و اطلاعاتی که می خوای رو پیدا کنی. ولی بدون داشتن فایل دقیق (حداقل قسمت قابل قبولی از اون) نمی شه نظر داد. دستور grep به راحتی جواب می ده و اگر می خوای فایل یا یک بخش خوبی اش رو بفرست که بشه نوشت کد رو.
عنوان: پاسخ : درخواست : استخراج عبارت از توی متن
ارسال شده توسط: جادی در 08 تیر 1393، 09:46 ق‌ظ
البته اینم بگم که روش درست تر از نظر برنامه نویسی، نوشتن یک برنامه کوچیک است که واقعا ایکس ام ال رو بفهمه و چیزی که می خوای رو نشون بده.
عنوان: پاسخ : درخواست : استخراج عبارت از توی متن
ارسال شده توسط: #elahe# در 08 تیر 1393، 02:36 ب‌ظ
مرسی از دوستان
با عبارات منظم حلش کردم
تو پی اچ پی
'#^\s*<tag>(.*?)</tag>$#im'
و راحت تر از اون تو spreadsheet هم تونستم تگها رو استخراج کنم
عنوان: پاسخ : درخواست : استخراج عبارت از توی متن
ارسال شده توسط: #elahe# در 08 تیر 1393، 09:17 ب‌ظ
البته اینم بگم که روش درست تر از نظر برنامه نویسی، نوشتن یک برنامه کوچیک است که واقعا ایکس ام ال رو بفهمه و چیزی که می خوای رو نشون بده.
جادی همه یا حداقل اکثر زبانهای برنامه نویسی کلاس(های)ی واسه کار با xml دارند
عنوان: پاسخ : درخواست : استخراج عبارت از توی متن
ارسال شده توسط: احمد حمزه ئی در 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# در 14 تیر 1393، 11:39 ب‌ظ
ممنون جناب حمزه ای
عالی بود
البته تست نکردم هنوز کدتون رو
به غیز از بار آموزشیش حتمن واسم به درد خواهد خورد
مرسی
عنوان: پاسخ : درخواست : استخراج عبارت از توی متن
ارسال شده توسط: جادی در 15 تیر 1393، 08:31 ق‌ظ
البته اینم بگم که روش درست تر از نظر برنامه نویسی، نوشتن یک برنامه کوچیک است که واقعا ایکس ام ال رو بفهمه و چیزی که می خوای رو نشون بده.
جادی همه یا حداقل اکثر زبانهای برنامه نویسی کلاس(های)ی واسه کار با xml دارند

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