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

مشاهدة النسخة كاملة : عدد الكلمات في متغير


ثامر أبو بلقيس
27-11-2013, 01:18 PM
السلام عليكم

ما الطريقة التي تراها أخي الكريم في حساب
عدد الكلمات في متغير Input أو RichText .....
نرجو وضع أكواد إن توفرت كفيلة بحساب ما طرح
سلام :abc_152:

عبود عبود
27-11-2013, 04:33 PM
مرحبا بكم من جديد بعد عودة الإنترنت لى :abc_065:


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

وبالتالى يمكنك إستخدام تحويل النص إلى مصفوفة ووضع البارامتر هو الفراغ "مسافة"

--
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

مع الوضع فى الإعتبار أن كلمة "DelimitedString" الموجودة فى الوظيفة هى النص المراد
وكلمة "Delimiter" هى الباراميتر والذى سوف تكتبة فى هذة الحالة مسافة فارغة

وسيكون الريترن للدالة السابقة هو جدول فيمكنك عد الكلمات بـــ تيبل كونت .

وطبعا للتوضيح للمبتدئين فإن الريتيرن سوف يخزن فى المتغير الذى تستعملة مع الدالة أو مع الدالة نفسها فى حالة عدم كتابة متغير لها .


بالتوفيق

ثامر أبو بلقيس
27-11-2013, 05:59 PM
السلام عليكم
في البداية شكرا جزيلا و لا أخفيك لم أستطع تطبيق ما ذكرت
لكن و لتبادل المعلومات سأقرأ لك هذا الحل :
في global function
function string.wordcount(t)
local t = t:gsub("^%s*(.-)%s*$", "%1");
local intWordCount = 0;
local intIndex = 1;
while intIndex <= String.Length(t) do
local strChar = String.Mid(t, intIndex, 1);
if intIndex == 1 then
strPrevChar = ' '
else
strPrevChar = String.Mid(t, intIndex-1, 1);
end
if strPrevChar == ' ' and strChar ~= ' ' then
intWordCount = intWordCount + 1;
end
intIndex = intIndex + 1;
end
return intWordCount
end

خذ أنبوت و أكتب فيه كلمات
لتحصل على النتائج وفق :
t = Input.GetText("Input1");
Dialog.Message("Notice", string.wordcount(t));

استفدت فأرجو أني أفدت
شكرا :abc_138:

عبود عبود
27-11-2013, 09:45 PM
كود إحترافى ............ شكرا :abc_152:

ثامر أبو بلقيس
27-11-2013, 10:40 PM
شكرا أخي عبود
أطالع الان في الاكواد التي تعتمد على المصفوفات لتفس الغرض
فأعجبني هذا قلت ارفعه قد نحتاجه يوما

في global function
function string:explode(szDivider)
if(Divider=="")then
return {self};
end
local intPosition = 0;
local arrResult = {};
local function FindAll()
return string.find(self,szDivider,intPosition,true);
end
for st,sp in FindAll do
arrResult[#arrResult+1]=string.sub(self,intPosition,st-1);
intPosition = sp+1;
end
arrResult[#arrResult+1]=string.sub(self,intPosition);
return arrResult;
end

و لعملية حساب المفردات مثلا من أنبوت :

szString = Input.GetText("Input1");
tblFinalResult = szString:explode(" ");
if(tblFinalResult)then
for k, word in pairs(tblFinalResult)do
Table.Concat(tblFinalResult, ";", word, TABLE_ALL);
end
end
result = Table.Count(tblFinalResult);
Dialog.Message("Notice",result);


تقديري :abc_138:

عبود عبود
27-11-2013, 10:50 PM
الكود السابق أفضل نظرا لأن الكود الأخير سوف يحتاج مجموعة شروط أو بعض الضبط كى لا يحتسب وجود مسافة فارغة على أنها كلمة إذا تم وضع المسافة الفارغة فى أول النص بمعنى حاول تجربة وضع مجموعة كلمات ووضع مسافة قبل الكلمة الأولى هههههههه :abc_152: عذرا فأنا أشجع الدقة لذلك علقت بكلمة كود إحترافى بالنسبة للكود السابق

ثامر أبو بلقيس
27-11-2013, 11:03 PM
مشكووور و فعلا اعتمدت الكود الأول

و على ذكر المسافات و طبعا خارج عن مجال تغطية الموضوع إليك
بكود يهمل المسافات بين الكلمات سأخبأه هناااا

Dialog.Message("Notice", string.gsub("أحمد سمير يوسف زكي", "%s", "") );

تقديري :abc_138:

عبود عبود
27-11-2013, 11:19 PM
تمام شكرا ........... جميل هذا الكود

ثامر أبو بلقيس
15-11-2014, 12:20 PM
:abc_138::abc_138:
هل من حلول أكثر احترافية ودقة ؟؟