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

مشاهدة النسخة كاملة : عدد سطور نص فى ذاكرة الجهاز


حازم الداهش
28-06-2014, 02:14 AM
السلام عليكم

لدى برنامج يستخدم الاضافة كلايبورد clipboard

و أقوم بنسخ مجموعة أسطر من ملف نصى بواسطة التظليل اليدوى ثم الأمر كوبى (المفترض أن المستخدم سينسخ نصا إلى برنامجى)

كيف اتمكن من معرفة عدد الأسطر الموجودة فى الذاكرة clipboard ؟؟
حتى أتمكن من عمل حلقة تتعامل مع النص و كأنه مجموعة من الأسطر
هل هناك طريقة لأتعرف على عدد الأسطر أم هذا مستحيل ؟؟

ثامر أبو بلقيس
28-06-2014, 02:37 AM
السلام عليكم ورحمة الله وبركاته

أخي حازم أقترح عليك بتصدير ما تم نسخه لملف نصي آخر
ثم يتم حساب الأسطر من خلاله فهمتني

جرب هذا :
result = Clipboard.GetText();
TextFile.WriteFromString("C:\\MyFile.txt", result, false);
c= TextFile.ReadToTable("C:\\MyFile.txt");
result = Table.Count(c);
Dialog.Message("Notice", result);

ملاحظة : في مثل هاته العمليات لا تنس عند تصدير مشروعك بأن تجعله مسؤول

موفق :abc_138:

حازم الداهش
28-06-2014, 03:02 AM
استاذ تامر

المستخدم هو من سينسخ الكود يدويا بمعرفته لأننى لا أعرف مصدر البيانات على جهازه و حتى لا اعرف نوع الملفات
كل ما اعرفه انها ستكون نصوص

هل اطلب من المستخدم اولا ان يحفظ البيانات فى شكل ملف نصى ؟

و هل افهم من ذلك انه لا توجد طريقة لعد الأسطر الموجودة بداخل الكلايبورد clipboard ؟

النصل القاطع
28-06-2014, 03:36 AM
أخى حازم
هل اطلب من المستخدم اولا ان يحفظ البيانات فى شكل ملف نصى ؟
كلا
الكود المطروح سيقوم بذلك

سؤالى لك
هل سيشكل إنشاء ملفا نصيا على القرص الصلب فارقا لديك ؟؟

لو كان ذلك يشكل فارقا لديك
فسأرسل لك كودا يقوم بعدد أسطر النص بداخل الكليبورد دون القيام بإنشاء اى ملفات نصية أو غير نصية
و سيتم العدد مباشرة من الذواكر

ان لم يكن يشكل فارقا
فالحل المقدم يفى بالغرض

ثامر أبو بلقيس
28-06-2014, 12:46 PM
السلام عليكم ورحمة الله وبركاته

تنوع الحلول أو تهذيب الأكواد أو تصحيحها يهمني للتشبع بأكثر
من طريقة و طرق معالجة التساؤلات
يمكن إدراج الطريقة فكل متعلم معني بإضافة معلومة جديدة :abc_138:

خادم المسلمين
28-06-2014, 12:50 PM
ما شاء الله عليك اخ ثامر و ربنا يكتر من أمثالك

حازم الداهش
28-06-2014, 02:04 PM
شكرا جزيلا استاذ تامر :abc_022:



سؤالى لك
هل سيشكل إنشاء ملفا نصيا على القرص الصلب فارقا لديك ؟؟


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

ياسرهتهت
28-06-2014, 04:18 PM
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
شكرا لك استاذنا الكريم / ابوبلقيس
الله يعطيك العافية
======:abc_139::abc_139:=======

ياسرهتهت
28-06-2014, 04:23 PM
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
اخي النصل القاطع
ارجوا ادراج الكود الذي لا ينتج ملف نصي
ويقوم بالعد مباشرة من ذاكرة الجهاز
موفق بإذن الله ... لك مني أجمل تحية .

النصل القاطع
30-06-2014, 04:02 AM
فى المشروع الحالى لن يفرق معى انشاء ملف نصى على القرص


حسنا أستاذ حازم
لو إحتجت للكود فى أى وقت فقط خبرنى
بالتوفيق

ثامر أبو بلقيس
30-06-2014, 05:51 AM
بسم الله الرحمن الرحيم

من بين الحلول العديدة إليك أخي و أستاذي المحترم ياسر مايلي :

أكتب في global functions
function DelimitedStringToTable(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


و لاستخراج عدد الأسطر التي تم نسخها نضع هذا الكود في زر مثلا
sz_string = Clipboard.GetText();
tblLines = DelimitedStringToTable(sz_string, "\r\n")
if (Table.Count(tblLines) > 0) then
min = 1;
max = Table.Count(tblLines);
Dialog.Message("Notice", max);
end

و السلام عليكم ورحمة الله :abc_138:

ياسرهتهت
30-06-2014, 08:46 AM
السلام عليكم ورحمة الله وبركاته
شــــــكراً أستاذي الكريم

الله يعطيك العافية

http://im77.gulfup.com/1ZUMjL.png-

حازم الداهش
30-06-2014, 12:30 PM
بسم الله الرحمن الرحيم

من بين الحلول العديدة إليك أخي و أستاذي المحترم ياسر مايلي :

أكتب في global functions
function DelimitedStringToTable(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


و لاستخراج عدد الأسطر التي تم نسخها نضع هذا الكود في زر مثلا
sz_string = Clipboard.GetText();
tblLines = DelimitedStringToTable(sz_string, "\r\n")
if (Table.Count(tblLines) > 0) then
min = 1;
max = Table.Count(tblLines);
Dialog.Message("Notice", max);
end

و السلام عليكم ورحمة الله :abc_138:

شكرا استاذ تامر
لكنى ساعتمد على الحل الأول
نظرا لسهولته

اكرر شكرى :abc_022:

النصل القاطع
30-06-2014, 12:47 PM
لكنى ساعتمد على الحل الأول
نظرا لسهولته

استاذ حازم
لا توزن الحلول بهذه الطريقة
الحل يبقى هو الحل

راجع الخاص

حازم الداهش
30-06-2014, 01:21 PM
شكرا جزيلا أستاذ النصل القاطع :abc_152:

بصراحة عندما عاينت الكود المرسل من حضرتك ظننت انك تمزح او تسخر
لم اتخيل أبدا ان الحل عبارة عن سطرين فقط من الكود

لذلك راجعت ملف حضرتك الشخصى
و اعتقد انك الأستاذ خالد بلا ادنى شك
جربت الكود و قام بعدد الأسطر

فهمت السطر الأول جيدا فهو يستخلص النص من الذاكرة
لم أفهم السطر الثانى من الكود مطلقا

لو تكرمت و عندما يتسع وقتك قم بتفسير السطر الثانى لى
قد اعيد هيكلة عشرات المشاريع وفقا لهذا الكود الرائع

شكرا أستاذى الكبير خالد على هذا الحل و الحمد لله اننى وجدتك بخير
:abc_022:

النصل القاطع
30-06-2014, 02:12 PM
بصراحة عندما عاينت الكود المرسل من حضرتك ظننت انك تمزح او تسخر


قد أمزح (لكن ليس وقت الجد)
لكنى لا أسخر أبدا


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


هو سطر واحد من يقوم بعد أسطر الإسترنج


لذلك راجعت ملف حضرتك الشخصى
و اعتقد انك الأستاذ خالد بلا ادنى شك


تتعدد المسميات و يبقى نفس الشخص


لو تكرمت و عندما يتسع وقتك قم بتفسير السطر الثانى لى
قد اعيد هيكلة عشرات المشاريع وفقا لهذا الكود الرائع

شكرا أستاذى الكبير خالد على هذا الحل و الحمد لله اننى وجدتك بخير
:abc_022:

فى أقرب فرصة
مرحبا بك فى منتدانا أستاذ حازم