الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيفية معالجة التكرار داخل النصوص

بدأه هانى عوض في 9 أبريل 2011 · 9 رد · 676 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

تحية طيبة

تواجهنى مشكلة فى حذف التكرار داخل متغير نصى كالمثال التالى:

مثال: قبل حذف التكرار:

1 هانى ، 2 هانى ، 3 هانى ، 15 ياسر ، 16 ياسر ، 55 هانى ، 66 هانى

المطلوب بعد حذف التكرار التالى:

1 ، 2 ، 3 ، 55 ، 66 هانى و 15 ، 16 ياسر

قمت باستخدام Regex فى الكود التالى

            var words = new HashSet<string>();
            text = Regex.Replace(text, "\\w+", m => words.Add(m.Value.ToUpperInvariant()) ? m.Value : String.Empty);
            text = text.Replace(",  ,", " ").Replace("   , ", " ").Replace(" ، , ", "،").Replace(" ,    ، ", "").Replace("  ", " ");
            text = text.Trim(',');
            return text.ToString();

ولكن بالرغم من أن الكود السابق يقوم بحذف تكرار الكلمات المتشابهة إلا أنه يعطى النتيجة التالية:

1 ، 2 ، 3 هانى و 15 ، 16 ياسر ، 55 ، 66

فما الحل من وجهة نظركم...

تقبلوا فائق الاحترام والتقدير

#2

كنت أفكر في أن تقوم بوضع الكلمات في مصفوفة باستخدام regex.spilt ... لكن نفس النتيجة

إلا لو استطعت الفصل بين الرقم والاسم في مصفوفة ثنائية عندها يمكنك البحث ضمن المصفوفة الثنائية بحسب الاسم وحذف القيم المكررة

ولكن الصراحة ليس لدي تصور عما سيحصل

قل لمن يحمل هما ****** إن همــــا لا يدوم
:rolleyes: :rolleyes: :clapping: :rolleyes: :rolleyes:

مثلا تفنى المسـرة ***** هكذا تفنى الهموم

#3

شكراً لحضورك أخى الكريم

بالفعل يتم جلب البيانات من DataRow باستخدام ForEach..

ولكن للأسف لم تكن النتيجة صحيحة

#4

السلام عليكم ورحمه الله وبركاته

اذا كانت البيانات يتم جلبها من DataRow يعني موجوده في جدول فليش هذا العناء؟!! يعني تبغاه يحذف الصفوف المكرر فيها الاسم او ايش؟؟

.:: Wish to become better and better ::.

#5

شكراً لمروركم أخى الكريم

بالفعل البيانات داخل جدول فى حقلين من نوع نص.. تمام.. : ويتم جلبها من أكثر من مجموعة: كالتالى

المجموعة الأولىA:

كود الاسم

1 هانى

2 هانى

3 هانى

15 ياسر

16 ياسر

55 هانى

66 هانى

المجموعة الثانيةB:

كود الاسم

11 هانى

12 هانى

13 هانى

44 ماجد

المطلوب عرضها بالشكل التالى

1 ، 2 ، 3 ، 55 ، 66 ، 11 ، 12 ، 13 هانى و 15 ، 16 ياسر ، 44 ماجد

وهكذا....

#6

السلام عليكم ورحمه الله وبركاته

جرب الكود التالي


tbl.Columns.Add("Code");
tbl.Columns.Add("Name");
DataRow dr;
dr = tbl.NewRow();
dr["Code"] = 1;
dr["Name"] = "Hani";
tbl.Rows.Add(dr);
dr = tbl.NewRow();
dr["Code"] = 2;
dr["Name"] = "Hani";
tbl.Rows.Add(dr);
dr = tbl.NewRow();
dr["Code"] = 3;
dr["Name"] = "Hani";
tbl.Rows.Add(dr);
dr = tbl.NewRow();
dr["Code"] = 15;
dr["Name"] = "Yasser";
tbl.Rows.Add(dr);
dr = tbl.NewRow();
dr["Code"] = 16;
dr["Name"] = "Yasser";
tbl.Rows.Add(dr);
dr = tbl.NewRow();
dr["Code"] = 55;
dr["Name"] = "Hani";
tbl.Rows.Add(dr);
dr = tbl.NewRow();
dr["Code"] = 66;
dr["Name"] = "Hani";
tbl.Rows.Add(dr);
DataRow[] rows = tbl.Select("", "Name");
int i;
for (i = 0; i < rows.Count()-1; i++)
{
if (rows["Name"] != rows[i+1]["Name"])
{
Console.WriteLine(string.Format("{0} {1}", rows["Code"], rows["Name"]));
}
else
{
Console.WriteLine(string.Format("{0}", rows["Code"]));
}
}
Console.WriteLine(string.Format("{0} {1}", rows["Code"], rows["Name"]));
DataTable tbl = new DataTable();

طبعاً طويل شوي لأنه الادخال كان من اصل الكود

1

.:: Wish to become better and better ::.

#7

الموضوع سهل وبسيط جرب هذا الكود في قاعدو البيانات هي سكول ويمكن تعديلها لتواكب الاوركل

CREATE function [dbo].[udfcol2rowEnvironmentNature] (@nNGOId bigint )
returns varchar(8000) as 
begin 
DECLARE @sName varchar(8000)

set @sName =''

SELECT  
		@sName=@sName + '-' +  dbo.NGO_EnvironmentNature.EnvNatureArabic
FROM    
		dbo.NGO_Environments_Nature LEFT OUTER JOIN
		dbo.NGO_EnvironmentNature ON dbo.NGO_EnvironmentNature.PK_EnvNatureId = dbo.NGO_Environments_Nature.EnvironmentNature_ID
WHERE   
		(dbo.NGO_Environments_Nature.NGO_ID = @nNGOId)
order by dbo.NGO_EnvironmentNature.PK_EnvNatureId 



set @sName =substring(@sName ,2,8000)--reomve first dash

return  @sName
end
#8

شكراً VB Helper تمت تجربة المثال وبالفعل النتيجة صحيحة وجارى تطبيقه على المشروع

شكراً KARIMSOFT ولكن المشروع متصل بأكسس

#9

أقدم جزيل شكرى وامتنانى لك أخى الكريم VB Helper....

تم تطبيقه على المشروع ويعمل بكفاءة..

وشكراً لكل من حاول المساعدة..

أخيكم

هانى عوض

#10

السلام عليكم ورحمه الله وبركاته

لاشكر على واجب اخي

.:: Wish to become better and better ::.

مواضيع مشابهة