المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : لأجل تعبئة سريعة


ثامر أبو بلقيس
20-12-2015, 04:26 PM
السلام عليكم ورحمة الله وبركاته
--------------------------------------
طلب برمجي يقدر ما أحتاجه و أحاول في تحقيقه بقدر ما أعجبتني الفكرة
فقلت أشارك طبعا هواة المتعة البرمجية هذا الطلب أو سمه كما شئت
---------------------------------------------------
التعبئة السريعة flash fill in excel تقنية تم استحداثها في الايكسل 2013 تحقق بواسطة فلترة أو كود قياسي
أو باستعمال كونترول + e من لوح المفاتيح المهم ما دورها ؟

اذا كانت لدينا قائمة من أسماء ثلاثية أو رباعية .... الخ
نختار مثال من الاسم الأول مثلا اسما ... تقوم هذه التقنية باستخراج كل الأسماء في كل القائمة
التي تتشارك مع الاسم السابق نفس الترتيب
----------------------
الصورة غير واضحة .. نبتعد عن عنصر الجريد و نسأل انطلاقا من ListBox
لديك ListBox بالشكل التالي على سبيل المثال :
http://store2.up-00.com/2015-12/1450619703751.png

الان تكتب في انبوت من الاسم الاول مثلا : نجيبة :abc_088: هذا هو الاسم المختار

تكون النتيجة :
نجيبة
إبراهيم
عصام
------------------------------ لان الاسم ترتيبه الثاني من كل سطر -----------------------------

ملاحظة : تم اختيار ListBox لتسهيل العمل و من ثم تحقيق به التعبئة السريعة وفق شروط و أبعاد البرمجة المستغلة لاجلها :abc_138:
مرحبا بمن أراد المشاركة
لم يعجبك الطلب اذن واصل في استغلال دالة وحيدة لا ثان لها لتظهر كل مرة
في حلة جديدة للأسف هي نفسها سلام :abc_138:

عبد الهادي بهاب
20-12-2015, 08:23 PM
وعليكم السلام ورحمة الله وبركاته
قد لا تكون مشاركتي ذات نفع لكن الا تعتقد ان الدالة المستعملة في جلب الكلمة الاولى من سطر في ملف txt تفي بالغرض ؟
---------- في موضوع سابق حول استدعاء الكلمة الاولى من سطر في txt------------

كما ان الدلة gmath ايضا لها نفس الدور وهي التي استعملتها مؤخرا في برامج الاسئلة ؟؟

ثامر أبو بلقيس
20-12-2015, 08:33 PM
عني فعلا مصر على الدالة gmath فهو إقتراح جميل و معقول حاول معي من هناااك
لاداع لأي ملفات تكست اذ كان متاح تحقيق الغاية من داخل الاوتوبلاي :abc_138:

عبد الهادي بهاب
20-12-2015, 08:43 PM
هذا مثال تطبيقي ............فرضا عندي ليسبوكس فيه اسماء ثلاثية او جمل او ............
في اليسبوكس الثاني سيتخرج لنا الكلمة الاولى او الثانية او الثالثة حسب الطلب

http://up.top4top.net/downloadf-top4top_78127d57211-rar.html

هذا فقط استغلال احد الكودات التي تفضلت بها علينا من قبل :abc_052::abc_052:

عبد الهادي بهاب
20-12-2015, 08:48 PM
السلام عليكم ورحمة الله وبركاته
--------------------------------------

الان تكتب في انبوت من الاسم الاول مثلا : نجيبة :abc_088: هذا هو الاسم المختار

ها سلام :abc_138:

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

تعديل في الكود السابق ........ سنجعل الزر يبحث عن ترتيب الكلمة المطلوبة ثم يعرض الكلمات الاخرى في السياق.........



ListBox.DeleteItem("ListBox2", LB_ALLITEMS);
p = Input.GetText("Input4");
local n=1
for i=1, ListBox.GetCount("ListBox1") do
g = ListBox.GetItemText("ListBox1",i)
x =1
for w in string.gmatch(g, "%S+") do
Input.SetText( "Input"..x , w);
x=x+1
for t=1,3 do
res = String.Find(Input.GetText("Input"..t), p, 1, false);
if res == 1 then
n=t
end
end;end
ListBox.AddItem("ListBox2", Input.GetText("Input"..n),"");
end


بعد تعديل الكود .......... اكتب اي اسم سيعرض الاسماء الاخرى من نفس الترتيب

تحياتي

عبد الهادي بهاب
20-12-2015, 09:41 PM
لم انجح في اضافة ظهور ديالوج .......لا يوجد هذا الاسم ..........فالديالوج يتكرر عي رغم محاولتي استعمال break

ثامر أبو بلقيس
20-12-2015, 10:07 PM
خوارزمية العمل التي تعمل عليها سليمة جدا لم تبق الا خطوات و تكتب حلا
لا أريد أن أفسد عليك الاستمتاع ببرمجة كود مهم متابع .... مراجعة بسيطة للأكواد و تصل :abc_138:

:abc_086:أنا أستفزك برمجيا:abc_086:

مساعدة : تخلى عن دالة البحث String.Find

ثامر أبو بلقيس
20-12-2015, 10:48 PM
لم انجح في اضافة ظهور ديالوج .......لا يوجد هذا الاسم ..........فالديالوج يتكرر عي رغم محاولتي استعمال break

لا يوجد شيء اسمه برغم مني بل أنت أرغمه للتوقف وقت ما تشاء :abc_138:

عبد الهادي بهاب
20-12-2015, 11:42 PM
خوارزمية العمل التي تعمل عليها سليمة جدا لم تبق الا خطوات و تكتب حلا
لا أريد أن أفسد عليك الاستمتاع ببرمجة كود مهم متابع .... مراجعة بسيطة للأكواد و تصل :abc_138:

:abc_086:أنا أستفزك برمجيا:abc_086:

مساعدة : تخلى عن دالة البحث string.find

شكرا استاذ .......لم اتي بجدي و انما دمج لاكواد سابقة ................و ساحاول طبعا


لا يوجد شيء اسمه برغم مني بل أنت أرغمه للتوقف وقت ما تشاء :abc_138:

وهذه ايضا سنحاول

شكرا جزيلا استاذ

و ارجو من الاخوة المساهمة ايضا في الموضوع

ثامر أبو بلقيس
21-12-2015, 12:56 AM
سأساهم بحل ... انطلاقا مما سبق من أكواد .. للوقوف على كل خلل بسيط و تطويعه
------------------------------------------------------------------------------------------------
flash fill in excel كما ذكرنا و تعرف بانها تقوم بهذا الاستخلاص بناء على اسم موجود في السطر الأولـ
لذلك سنستعمل Input1 لنكتب فيه الاسم المنتمي للسطر الأول
هذا الاسم الكود كفيل بمعرفة رتيته ليقوم بتصفية و استخراج كل الأسماء التي تحمل نفس الترتيب
في كامل الصفوف تباعا .. و سنظهر النواتج في Dialog عن قصد
----------------------------------------------------------------------------
لنكتب في ListBox1 أسماء أو أرقاما حيث السطر الواحد يمكنه أن يشمل عدة مفردات
-----------------------------------------------------------------------------------------------
result1 = ListBox.GetItemText("ListBox1", 1); --- قراءة محتوى السطر الأول من الليست
Y = Input.GetText("Input1"); -- تخزين المفردة محل الترتيب و تكون من مفردات السطر الأول
x=1 --- الاعلان عن قيموة ابتدائية متزايدة
for token in string.gmatch(result1, "[^%s]+") do -- استخلاص مفردات السطر الاول من الليست كلمة كلمة
if token==Y then --- و عند تحقق شرط تساوي كلمة من الليست يوكس مع المكتوبة في الانبوت
b = x --- نخزن قيمة اكس الجديدة و هي مساوية تماما لترتيب الكلمة في الليست
end
x=x+1--- يتم تزايد القيمة بواحد
end
---- اذن من خلال ماسبق عرفنا ترتيب المفردة و مكتن تواجدها
n =1 --- هذه قيمة ابتدائية جديدة
for pp = 1,ListBox.GetCount("ListBox1")do -- تكرار من الواحد لغاية عدد الأسطر في الليسا
ahmed=ListBox.GetItemText("ListBox1", pp);--- ثم نقرأ محتوى الأسطر بالواحد
for token2 in string.gmatch(ahmed, "[^%s]+") do -- ونجزيء السطر الى مفردات

if n == b then -- بمجرد تساوي القيمة الابتدائية مع الترتيب الذي استنبطناه في أول الكود
Dialog.Message("Notice", token2); --- نخزن المفردة المتوافقةمن السطر
break -- و نفرض توقف التكرار
end
n=n+1 -- هنا تزايد القيمة الافتراضية
end
n=1 -- وهذا أهم اجراء بحيث نعيد الدورة بنفس الشروط الابتدائية بعد تخزين المفردة
end--- انتهى

نفرأ محاولات أجمل ... :abc_138: و أسئلة أجمل :abc_138:

عبد الهادي بهاب
21-12-2015, 12:14 PM
الحل جميل و شرح كافي ........ لكنه يعمل فقط مع كلمة ضمن السطر الاول من الليستبوكس
:abc_152:

ثامر أبو بلقيس
21-12-2015, 12:48 PM
تقصد بعد اختيار كلمة من السطر الأول
تتم ظهور كل كلمات الأسطر الأخرى المتوافقة مع الكلمة المختارة من السطر الأول و التي
اخترناها كعامل فرز اذ كان كذلك و هذا فعلا ما يحدث فذاك هو المطلوب حسب السؤال في جميع مراحله و حسب تقنية التعبئة :abc_138:
-------------------------------
اذ لم يكن كذلك وضح .

عبد الهادي بهاب
21-12-2015, 02:18 PM
تقصد بعد اختيار كلمة من السطر الأول
تتم ظهور كل كلمات الأسطر الأخرى المتوافقة مع الكلمة المختارة من السطر الأول و التي
اخترناها كعامل فرز اذ كان كذلك و هذا فعلا ما يحدث فذاك هو المطلوب حسب السؤال في جميع مراحله و حسب تقنية التعبئة :abc_138:
-------------------------------
اذ لم يكن كذلك وضح .

واضح جدا ....:abc_152::abc_152:
يعني كنت احاول اضافة for في الاول ليعمل مع كل الاسطر ........يبحث عن الكلمة مهما كان موقعها في اليسبوكس و يستدعي مثيلاتها

........................
حاولت باستخدام دالة StringDelimitedToTable اي احول محتوى السطر في اليسبوكس الى عناصر ثم ابحث عن رقمها .......و اتدعي مثيلاتها في ليستبوكس او ديالوج ....لكن الكود يستخرج فقط الكلمات المشابهة فقط اذا كان سطرها اسفل منها .........

ساضع الكود .....لاحقا...:abc_012::abc_012:....بعد الصلاة ...:abc_088::abc_088:....

ثامر أبو بلقيس
21-12-2015, 07:16 PM
كل هذا الكلام جيد فقط كانت أمامي عملية في الابكسل حاولت تقليدها في الاوتوبلاي
بنفس الطربقة لكن لابأس من قراءة الكود الذي ستشاركني ( نا ) به لقراءة ما فكرت فيه أو اطرح
الأمر على شكل تمرين " ..منها نحاول و منها نقتل الرتابة و ما هيش عيب أو ضعف عندما أخبرك بعجزي وخروجي متسللا
و ما هيش قوة أو تمكن إن وصلت لحل .." سلامي الخاص :abc_138:

عبد الهادي بهاب
21-12-2015, 11:30 PM
كل هذا الكلام جيد فقط كانت أمامي عملية في الابكسل حاولت تقليدها في الاوتوبلاي
بنفس الطربقة لكن لابأس من قراءة الكود الذي ستشاركني ( نا ) به لقراءة ما فكرت فيه أو اطرح
الأمر على شكل تمرين " ..منها نحاول و منها نقتل الرتابة و ما هيش عيب أو ضعف عندما أخبرك بعجزي وخروجي متسللا
و ما هيش قوة أو تمكن إن وصلت لحل .." سلامي الخاص :abc_138:

هذه التحديات هي التي جعلتني اتعرف اكواد جديدة .......و لله المنة و الفضل ........ و الشكر موصول لكم استاذ على الاستفزاز البرمجي

.....................هذا اقراح حل و جميل و مختصر ايضا على الاقل نجح معي .........

في global function نضع :



function StringDelimitedToTable(DelimitedString, Delimiter)
tbReturn = {};
local strWorking;
local nPos = nil;
local strData;
local nTableIndex = 1;
local nDelimiterLength = String.Length(Delimiter);
if(nDelimiterLength < 1)then
tbReturn[nTableIndex] = DelimitedString;
return tbReturn;
end
strWorking = DelimitedString;
nPos = String.Find(strWorking,Delimiter);
while(nPos ~= -1)do
strData = String.Left(strWorking,nPos-1);
tbReturn[nTableIndex] = strData;
nTableIndex = nTableIndex + 1;
local nLength = String.Length(strWorking);
strWorking = String.Right(strWorking,nLength - (nPos + (nDelimiterLength-1)));
nPos = String.Find(strWorking,Delimiter);
end
if(strWorking ~= "")then
tbReturn[nTableIndex] = strWorking;
end
return tbReturn;
end





و في زر نضع الكود التالي و هو مسؤول عن البحث فقط في السطر الاول من اليسبوكس


ListBox.DeleteItem("ListBox2", LB_ALLITEMS);
---------------
g = ListBox.GetItemText("ListBox1", 1);
y = StringDelimitedToTable(g, " ");
con = Table.Count(y);
for t,nom in pairs(y) do
if Input.GetText("Input1") == nom then
for i=1, ListBox.GetCount("ListBox1") do
s = ListBox.GetItemText("ListBox1", i);
x = StringDelimitedToTable(s, " ");
ListBox.AddItem("ListBox2", x[t], "");
end
end
end


تحياتي استاذ :abc_152::abc_152:

ثامر أبو بلقيس
21-12-2015, 11:38 PM
:abc_138: شـكــ وبارك الله فيك ـــرا لك ... لك مني أجمل تحية . :abc_138:

:teslam_2:

مشكل بسيط في حالة عدم تساوي مفردات الاسطر :abc_138:
على كل لك مني محاولة في قسم الشروحات تستطيع من خلالها اختيار أي مفردة و من أي سطر :abc_138:

عظيمه
19-01-2016, 11:51 PM
شـكــ وبارك الله فيك ـــرا لك ... لك مني أجمل تحية .
موفق بإذن الله ... لك مني أجمل تحية .