نمایش نتایج 1 تا 7 از 7

نام تاپیک: بدست آوردن مقادیر استرینگ از یک جمله و ریختن آن در لیست

  1. #1
    کاربر دائمی
    تاریخ عضویت
    خرداد 1391
    محل زندگی
    https://gardesh-gar.ir
    پست
    527

    بدست آوردن مقادیر استرینگ از یک جمله و ریختن آن در لیست

    سلام.
    فرض کنید یه متن استرینگی به این صورت دارم (یا مثلا یک فایل تکست):
    ..........Status:Right Date:2014/01/01 Id:0111 Text:Barname \r\n Status:Left Date:2014/01/02 Id:0112 Text:Nevis \r\n
    اون چند نقطه یعنی همینطور این روال ادامه داره،با ID های جدید!
    حالا میخوام که مثلا کل مقادیر Status ها رو از این متن بگیرم مثلا اینجوری میشه:(سه نقطه یعنی تا ابد ادامه داره)
    Right
    Left
    .
    .
    .
    همچنین میخوام که مثلا کل مقادیر Date ها رو از این متن بگیرم مثلا اینجوری میشه:
    2014/01/01
    2014/01/02
    .
    .
    .
    و این روال برای تمامی مقادیر تا انتهای رشته ما ادامه داره!
    با IndexOf و Split و ... نتونستم بدرستی اینکار رو انجام بده!
    لطف میفرمایید چطوری میتونم اینو پیاده سازی کنم.
    اینجور چیزها خوراک مستر خوخان هست!
    باتشکر

  2. #2
    کاربر دائمی
    تاریخ عضویت
    مرداد 1388
    محل زندگی
    پونک
    سن
    42
    پست
    490

    نقل قول: بدست آوردن مقادیر استرینگ از یک جمله و ریختن آن در لیست

    با Split ميتوني درستش كني! Separator رو Space قرار بده و يه آرايه از string درست كن و براحتي كاري كه ميخواي انجام بده ديگه!

    مثلا اگه بخواي Status ها رو بكشي بيرون از Linq استفاده كن و بعد از اينكه با متد Where مطلوب رو كشيدي بيرون قسمت :Status رو حذف كن و تو يه List اضافه كن...

  3. #3
    کاربر دائمی آواتار pedram.11
    تاریخ عضویت
    اردیبهشت 1391
    محل زندگی
    پشت کامپیوتر
    پست
    394

    نقل قول: بدست آوردن مقادیر استرینگ از یک جمله و ریختن آن در لیست

    سلام
    string[] getItems(string[] lines, string key)
    {
    key = key.ToLower();
    List<string> items = new List<string>();
    foreach (string line in lines)
    {
    string[] parts =line.Replace(" "," ").Split(' ');
    foreach (string part in parts)
    if (part.ToLower().StartsWith(key + ":")){
    items.Add(part.Split(':')[1]);
    break;
    }
    }
    return items.ToArray();
    }



    string data = @"Status:Right Date:2014/01/01 Id:0111 Text:Barname
    Status:Left Date:2014/01/02 Id:0112 Text:Nevis";
    string[] lines = data.Replace("\r\n", "\n").Split('\n');
    string[] status = getItems(lines, "status");

  4. #4
    کاربر دائمی
    تاریخ عضویت
    خرداد 1391
    محل زندگی
    https://gardesh-gar.ir
    پست
    527

    نقل قول: بدست آوردن مقادیر استرینگ از یک جمله و ریختن آن در لیست

    از دوستان سپاس گذارم!
    منتهی یادم رفت این نکته رو عرض کنم که چرا با split نتونستم پیاده کنم!
    بزرگترین مشکل اینجاست:Date به این شکله

    2014/01/01 6:20:00 PM
    و میخوام تاریخ رو جدا بگیرم و ساعت رو جدا!
    و مشکل بعدی در قسمت Text ممکن است کاراکتر اسپیس یا کارکتر : وجود داشته باشد:مثلا اینطوری:
    Text:My Name is:ashkan
    این دو مورد برام مشکل سازن!
    باتشکر از شما!


  5. #5
    کاربر دائمی آواتار pedram.11
    تاریخ عضویت
    اردیبهشت 1391
    محل زندگی
    پشت کامپیوتر
    پست
    394

    نقل قول: بدست آوردن مقادیر استرینگ از یک جمله و ریختن آن در لیست

    این محدودیت هایی که گذاشتید خیلی مشکل ساز هست. در مورد اول که اگه مقدارتون اسپیس داشته باشه میشه کنار اومد. اما در مورد دوم که مقدار میتونه خود کاراکتر splitter رو هم داشته باشه مشکل ساز میشه. برای حل مشکل یا باید این کاراکتر رو در نظر نگیرید و یا اینکه تمام کلید هارو بعنوان کلید های از قبل تعیین شده ثبت کنید که برنامه این نام هارو بشناسه. اونوقت باز میشه یکارایی کرد

  6. #6
    کاربر دائمی
    تاریخ عضویت
    خرداد 1391
    محل زندگی
    https://gardesh-gar.ir
    پست
    527

    نقل قول: بدست آوردن مقادیر استرینگ از یک جمله و ریختن آن در لیست

    نقل قول نوشته شده توسط pedram.11 مشاهده تاپیک
    این محدودیت هایی که گذاشتید خیلی مشکل ساز هست. در مورد اول که اگه مقدارتون اسپیس داشته باشه میشه کنار اومد. اما در مورد دوم که مقدار میتونه خود کاراکتر splitter رو هم داشته باشه مشکل ساز میشه. برای حل مشکل یا باید این کاراکتر رو در نظر نگیرید و یا اینکه تمام کلید هارو بعنوان کلید های از قبل تعیین شده ثبت کنید که برنامه این نام هارو بشناسه. اونوقت باز میشه یکارایی کرد
    خیلی متوجه راه حلتون نشدم!

  7. #7
    کاربر دائمی آواتار pedram.11
    تاریخ عضویت
    اردیبهشت 1391
    محل زندگی
    پشت کامپیوتر
    پست
    394

    نقل قول: بدست آوردن مقادیر استرینگ از یک جمله و ریختن آن در لیست

    سلام. منظورم اینه که با این محدودیت ها باید کلید ها ثابت باشن. مثلا کدتون توی این مثالی که قرار دادید فقط باید دارای کد های status، id، date و text رو داشته باشه. برای این حالت من کدی نوشتم که امیدوارم نیازتون رو برآورده کنه:
    enum itemType
    {
    status,
    date,
    id,
    text
    }
    class item
    {
    public itemType type;
    public string value;
    }
    class items : List<item>
    {
    public items() { }
    public items(string line)
    {
    item itm;
    string[] enums = Enum.GetNames(typeof(itemType));
    foreach (string en in enums)
    {
    if (line.Length == 0)
    return;
    while (char.IsWhiteSpace(line[0]))
    line = line.Remove(0, 1);
    if (line.ToLower().StartsWith(en))
    {
    itm = new item();
    itm.type = (itemType)Enum.Parse(typeof(itemType), en);
    line = line.Remove(0, en.Length);
    while (!char.IsLetterOrDigit(line[0]))
    line = line.Remove(0, 1);
    itm.value = "";
    switch (itm.type)
    {
    case itemType.date:
    int ind = line.ToLower().IndexOf("m");// am or pm
    if (ind < 0)
    {
    ind = 0;
    while (!char.IsWhiteSpace(line[ind]))
    ind++;
    ind--;
    }
    itm.value = line.Substring(0, ind + 1);
    line = line.Remove(0, ind + 1);
    break;
    case itemType.id:
    while (!char.IsDigit(line[0]))
    line = line.Remove(0, 1);
    while (char.IsDigit(line[0]))
    {
    itm.value += line[0].ToString();
    line = line.Remove(0, 1);
    }
    break;
    case itemType.status:
    while (!char.IsWhiteSpace(line[0]))
    {
    itm.value += line[0].ToString();
    line = line.Remove(0, 1);
    }
    break;
    case itemType.text:
    int ind1=-1, ind2=-1;
    foreach (string en0 in enums)
    {
    if (ind1 < 0)
    {
    ind1 = line.ToLower().IndexOf(en0);
    continue;
    }
    if ((ind2 = line.ToLower().IndexOf(en0)) > 0 && ind2 < ind1)
    ind1 = ind2;
    }
    if (ind1 > 0)
    itm.value = line.Substring(0, ind1);
    else
    itm.value = line;
    break;
    }
    this.Add(itm);
    }
    }
    }
    }
    class itemss : List<items>
    {
    public itemss() { }
    public itemss(string[] lines)
    {
    foreach (string line in lines)
    this.Add(new items(line));
    }
    public items this[itemType type]
    {
    get
    {
    items _itms = new items();
    foreach (items itms in this)
    {
    foreach (item itm in itms)
    {
    if (itm.type == type)
    {
    _itms.Add(itm);
    break;
    }
    }
    }
    return _itms;
    }
    }
    }
    public void Check()
    {
    string data = @"Status:Right Date:2014/01/01 6:20:00 PM Id:0111 Text:My Name is:ashkan
    Status:Left Date:2014/01/02 Id:0112 Text:Nevis";
    string[] lines = data.Replace("\r\n", "\n").Split('\n');
    itemss _itemss = new itemss(lines);
    items status = _itemss[itemType.status];
    items dates = _itemss[itemType.date];
    items ids = _itemss[itemType.id];
    items texts = _itemss[itemType.text];
    }


    امیدوارم که محدودیتها بیشتر نشن همینطوریشم به زور کتک درست شده

تاپیک های مشابه

  1. سوال: کلیک رو Cel در مورد GridView و بدست آوردن مقادیر
    نوشته شده توسط pishraft در بخش C#‎‎
    پاسخ: 5
    آخرین پست: سه شنبه 03 اسفند 1389, 23:47 عصر
  2. بدست آوردن مقادیر تکراری یک فید از یک جدول
    نوشته شده توسط نیما حتمی در بخش Foxpro
    پاسخ: 1
    آخرین پست: سه شنبه 26 بهمن 1389, 12:48 عصر
  3. سوال: بدست آوردن مقادیر حافظه رم از طریق خود توابع و کلاسهای .net
    نوشته شده توسط Arash-For-Life در بخش C#‎‎
    پاسخ: 2
    آخرین پست: چهارشنبه 08 مهر 1388, 00:32 صبح
  4. سوال: بدست آوردن مقادیر یک Row در یک دیتاگرید هنگام انتخاب کاربر
    نوشته شده توسط dark-man در بخش C#‎‎
    پاسخ: 10
    آخرین پست: سه شنبه 05 آذر 1387, 12:52 عصر
  5. بدست آوردن مقادیر ویژه یک ماتریس؟
    نوشته شده توسط امیر-نا در بخش الگوریتم، کامپایلر، هوش مصنوعی و ساختمان داده ها
    پاسخ: 2
    آخرین پست: شنبه 21 شهریور 1383, 19:12 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •