PDA

View Full Version : جدا کردن متن بر اساس کاراکتر خاصی



javad_r_85
پنج شنبه 15 اردیبهشت 1390, 08:43 صبح
سلام .
متنی شبیه زیر دارم



{xxxix,{ †‡ƒ«. :›¢øñ


}xxxix,{ †‡ƒ«. :›¢øñ


می خوام متنی که بین } { قرار دارد را جدا کنم و متنی نیز که بین } { نیست را جدا کنم (با استفاده از جنریک ها ) چطور می شه این کاررو کرد؟
این متن متغییر هست در یک متن اصلا آکولاد نیست در یک متنی چندین قسمت وجود دارد؟

javad_r_85
پنج شنبه 15 اردیبهشت 1390, 11:29 صبح
دوستان کسی نظری نداره .

متنی که جدا می شود باید مشخص شود که بین دو کارکتر بوده یا خارج از ان می توان از دو متغییر استفاده کرد که در اولی متن بین دو کاراکتر و دومی متن خارج از آن نوشته شود ولی متن کاملا پویاست و تغییر می کندبه نظرم اگر از جنریک استفاده شود بهتر است .از دوستان کسی در این باره نظری ندارد؟

majidrezaei2007
پنج شنبه 15 اردیبهشت 1390, 18:45 عصر
از دستور split خود کلاس رشته ای استفاده کن
مثلا اون متن داخل یک متغیر رشته ای به نام str هست
بنویس : str.split("{")
و یک آرایه ازت میگیره و داخل اون میریزه
ضمن اینکه می تونید با یک for خودتون کارتون رو انجام بدین

Farshid007
پنج شنبه 15 اردیبهشت 1390, 21:18 عصر
فکر کن که }xxxix,{ †‡ƒ«. :›¢øñمتن رو داریم
می خواهیم بین}و{رو بخونیم و بقیه متن رو هم در بیاریم
string A = "}xxxix,{ †‡ƒ«. :›¢øñ";
string B = A;
A = A.Substring(A.LastIndexOf('}') + 1, A.Length - A.LastIndexOf('}') - 1);
A = A.Substring(0,A.LastIndexOf('{'));
MessageBox.Show("The Text middle of },{ : "+A);
B = B.Replace(A, "");
B = B.Replace("{", "");
B = B.Replace("}", "");
MessageBox.Show("Other Text: " +B);

javad_r_85
پنج شنبه 15 اردیبهشت 1390, 23:29 عصر
نه دوست عزیز اولا که متن من پویاست ممکن است که مانند زیر باشد
}xxxix,{ †‡ƒ«. :›¢øñ}xxxix,{ †‡ƒ«. :›¢øñ}xxxix,{ †‡ƒ«. :›¢øñ

و اینکه باید مشخص شود که کدام متغییر متن داخل آکولاد هست و کدام متغییر متن خارج آن .

Farshid007
جمعه 16 اردیبهشت 1390, 13:46 عصر
خوب متغیرAداخل اکولاد رو نشون می ده,متغیر Bهر چیزی که خارج از اکولاد هستش رو نشون می ده!
و در مورد اینکه ممکن متن اینوری باشه:}xxxix,{ †‡ƒ«. :›¢øñ}xxxix,{ †‡ƒ«. :›¢øñ}xxxix,{ †‡ƒ«. :›¢øñ
شاید بشه با حلقه جدا کنی ولی مغز من بیشتر از این نمیکشه

javad_r_85
جمعه 16 اردیبهشت 1390, 13:56 عصر
ممنون که جواب دادید ولی مشکل من در همینه که ممکنه چندین بار تکرار شود وگرنه اون که کاری نداره می تونم درش بیارم؟؟

Farshid007
جمعه 16 اردیبهشت 1390, 17:00 عصر
string A = "}salam{†‡ƒ«. :›¢øñ}Khubi?{ †‡ƒ«. :›¢øñ}merC{ †‡ƒ«. :›¢øñ";

for (int i = 0; i < A.IndexOf("{"); i++)
{
string B = "";
B = A.Substring(A.IndexOf("}") + 1, A.IndexOf("{") - 1);
MessageBox.Show(B);
A = A.Remove(A.IndexOf("}"), A.IndexOf("{")+1);
}
اینارو کپی کن تو VSخودت متوجه میشی که چه مششکلی داره
من هرچقدر که فکر کردم نفهمیدم مشکل از کجاست
ببین خودت می تونی بفهمی !

exlord
جمعه 16 اردیبهشت 1390, 17:44 عصر
string data = "xxxix,{ †‡ƒ«. :›¢øñ}xxxix,{ †‡ƒ«. :›¢øñ}xxxix,{ †‡ƒ«. :›¢øñ}";
List<Tuple<bool, string>> parts = new List<Tuple<bool, string>>();
while (true)
{
int start = data.IndexOf('{');
int end = data.IndexOf('}');
if (start != -1 && end != 1)
{
parts.Add(new Tuple<bool, string>(false, data.Substring(0, start)));
parts.Add(new Tuple<bool, string>(true, data.Substring(start + 1, end - start - 1)));
data = data.Remove(0, end + 1);
}
else
break;
}

javad_r_85
جمعه 16 اردیبهشت 1390, 19:21 عصر
این Tuple چیه اونوقت نمی شناستش؟

exlord
جمعه 16 اردیبهشت 1390, 20:18 عصر
این Tuple چیه اونوقت نمی شناستش؟
System.Tuple --> .net 4
اگه 4 ندارین معادلش میشه این :
public class Tuple<T1, T2>
{
public T1 Item1 { get; set; }
public T2 Item2 { get; set; }
public Tuple(T1 Item1, T2 Item2)
{
this.Item1 = Item1;
this.Item2 = Item2;
}
}

javad_r_85
جمعه 16 اردیبهشت 1390, 23:06 عصر
ممنون دوست عزیز با این نوع خیلی حال کردم می شه در بارش توضیخ بدید مانند Dictionary <bool,string > هست؟

exlord
شنبه 17 اردیبهشت 1390, 11:40 صبح
ممنون دوست عزیز با این نوع خیلی حال کردم می شه در بارش توضیخ بدید مانند Dictionary <bool,string > هست؟
نه Dictionery یه لیست / آرایه س که هر عضوش 2 تا عضو Key/Value دارن ... ولی Tuple در واقع یه کلاس Generic برای نگه داری داده ها از هر نوعی که میخواین ... در واقع به جای اینکه برای نگه داری هر نوی داده ای یه کلاس مجزا تعریف کنین ... یه کلاس از نوی Tuple تعریف میکنیم به تعداد مورد نیاز بهش T اضافه میکنیم و موقع ایتفاده نوع این T هارو مشخص میکنیم ...