delphi4arab منتديات دلفي للعرب

نسخة كاملة : احصاء الحروف العربية
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم ورحمة الله تعالى وبركاته
رمضان مبارك للجميع
هل فيه امكانية باستعمال الديلفي لاحصاء الحروف العربية مع الحركات كل على حدى في نص معين
رجاءا اين انتم
وجدت برنامج هنا ، لكنه يحسب عدد الاحرف فقط
لكنني اريد ان احسب كل حرف على حدى
ربي يجازيكم
[size=small]السلام عليكم ورحمة الله تعالى وبركاته[/size]

PHP كود :
var
 
i  : integer;
 
s2 : string;
begin
 s2 
:= '';
 for 
i := 1 to Length( s ) do
 
begin
   ShowMessage 
(s[ i ])  ;
 
end;
end; 
السلام عليكم
استخدم جدول الحروف العربية
فمثلا الحرف "ض" يساوي القيمة h0636 بنظام ترميز يونيكود

مثال للإستخدام
الجدول غير كامل فيه الحروف والرموز كما ذكرت...

PHP كود :
const
 
 // Arabic Unicode Character Table
 
 AUCTable: array[0..49] of Word = (
 
   $0621, $0622, $0623, $0624, $0625, $0626, $0627, $0628,
 
   $0629, $062A, $062B, $062C, $062D, $062E, $062F, $0630,
 
   $0631, $0632, $0633, $0634, $0635, $0636, $0637, $0638,
 
   $0639, $063A, $063B, $063C, $063D, $063E, $063F, $0640,
 
   $0641, $0642, $0643, $0644, $0645, $0646, $0647, $0648,
 
   $0649, $064A, $064B, $064C, $064D, $064E, $064F, $0650,
 
   $0651, $0652);

procedure TForm1.Button1Click(Sender: TObject);
var
 
 I: Byte;
begin
  for I 
:= 0 to 49 do
 
   Memo1.Lines.Add(WideChar(AUCTable[I]));
end; 
السلام عليكم
وتقبل الله منا ومنكم صالح الاعمال

مشكورين اخوتي اسف لانني لم افهم بسبب طول ابتعادي عن البرمجة نسيت اغلب الاوامر والاجراءات

لكن لتبسيط الرؤية مثلا عندي كلمة او نص "بسم الله الرحمن الرحيم "
يعطيني تكرارات كل حرف
عملت برنامج في الاكسل بسيط يعطي تكرارات كل حرف في خانة معينة لكن اريد الكيفية عن طريق الدلفي
وجزاكم الله خير الجزاء
وعليكم السلام
يمكنك التوضيح أكثر
هل تبحث عن تكرار الحروف في الجملة كاملة؟
(06-06-2018, 11:50 PM)Agmcz كتب : [ -> ]وعليكم السلام
يمكنك التوضيح أكثر
هل تبحث عن تكرار الحروف في الجملة كاملة؟
رمضان كريم
نعم أخي
مثلا "بسم الله الرحمان الرحيم "
ا=4، ب=1 ، س=1   ..... الخ
هذا مثال يجسد الفكرة
يفضل أن تستخدم نسخة دلفي تدعم يونيكود يعني النسخ من Delphi 2009 فما فوق

PHP كود :
const
 
 // Arabic Unicode Character Table
 
 AUCTable: array[0..41] of Word = (
 
   $0621, $0622, $0623, $0624, $0625, $0626, $0627, $0628,
 
   $0629, $062A, $062B, $062C, $062D, $062E, $062F, $0630,
 
   $0631, $0632, $0633, $0634, $0635, $0636, $0637, $0638,
 
   $0639, $063A, $063B, $063C, $063D, $063E, $063F, $0640,
 
   $0641, $0642, $0643, $0644, $0645, $0646, $0647, $0648,
 
   $0649, $064A);

const
 
 ws = 'بسم الله الرحمان الرحيم';

function 
AUCTIndex(Value: Word): Byte;
begin
  Result 
:= Value mod $0621;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 
 I: Cardinal;
 
 ca: array[0..41] of Cardinal;
begin
  ZeroMemory
(@ca, 42 * SizeOf(Cardinal));
 
 for I := 1 to Length(ws) do
 
 begin
    if 
(Word(ws[I]) >= $0621) or (Word(ws[I]) <= $064A) then
      Inc
(ca[AUCTIndex(Word(ws[I]))]);
 
 end;
 
 for I := 0 to 41 do
 
   case ca[I] of
      1
..SizeOf(Cardinal): Memo1.Lines.Add(WideChar(AUCTable[I]) + ' = ' + IntToStr(ca[I]));
 
   end;
end; 

كما يمكنك لدعم Delphi 7 والنسخ الغير داعمة لليونيكود
تعديل الثابت في المثال السابق إلى

PHP كود :
 ws = WideString('بسم الله الرحمان الرحيم'); 

المثال يقوم بالتحقق من الحروف من ء إلى ي
بالتوفيق..

إصلاح المقارنة في مجال الأحرف

PHP كود :
const
 
 // Arabic Unicode Character Table
 
 AUCTable: array[0..41] of Word = (
 
   $0621, $0622, $0623, $0624, $0625, $0626, $0627, $0628,
 
   $0629, $062A, $062B, $062C, $062D, $062E, $062F, $0630,
 
   $0631, $0632, $0633, $0634, $0635, $0636, $0637, $0638,
 
   $0639, $063A, $063B, $063C, $063D, $063E, $063F, $0640,
 
   $0641, $0642, $0643, $0644, $0645, $0646, $0647, $0648,
 
   $0649, $064A);

const
 
 ws = 'بسم الله الرحمان الرحيم';

function 
AUCTIndex(Value: Word): Byte;
begin
  Result 
:= Value mod $0621;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 
 I: Cardinal;
 
 ca: array[0..41] of Cardinal;
begin
  ZeroMemory
(@ca, 42 * SizeOf(Cardinal));
 
 for I := 1 to Length(ws) do
 
 begin
    case Word
(ws[I]) of
      
$0621..$064A: Inc(ca[AUCTIndex(Word(ws[I]))]);
 
   end;
 
 end;
 
 for I := 0 to 41 do
 
   case ca[I] of
      1
..SizeOf(Cardinal): Memo1.Lines.Add(WideChar(AUCTable[I]) + ' = ' + IntToStr(ca[I]));
 
   end;
end; 
بارك الله فيك