فصل كلمتين موجودان في حقل
#1
السلام عليكم
هل يمكنني فصل الأسم اللقب عن بعضهما موجودان مع بعض في حقل واحد
ليكون الأسم في حقل منفصل
و اللقب في حقل منفصل
جزاكم الله كل الحير
الرد
#2
سلام عليكم
استعمل الكود التالي
var s : string ;
begin
s:= 'delphiarabe' ;
insert ( ' ' ,s,7);
form1.Caption := s;
الرد
#3
و عليكم السلام و رحمة الله تعالى و بركاته:
أخي مجرد محاولة يمكن أن تنفعك أو تتخذهامنطلقا لتجد الحل الصحيح و تفيدنا به.
أخي مثالي هذا في حالة أسماء ثنائية أي الاسم و اللقب و لكن الاشكال هو في حالة اللقب مركب أو الاسم مركب نرجو من الخبراء إفادتنا به.

كود :
procedure TForm1.Button1Click(Sender: TObject); var s,k:string; i,j:integer; begin s:=''; i:=1; j:=0; for i:=1 to length(edit1.Text) do begin if ((edit1.Text[i])<>#32) and (i>j) then begin s:=s+edit1.Text[i] ; end else begin j:=i+1; k:=k+edit1.Text[j] ; end; end; edit2.Text:=s; edit3.Text:=k; end;

الشرح:
edit1: فيها الاسم و للقب الاصلي
edit2: لحمل اللقب بعد الفصل
edit3: لحمل الاسم بعد الفصل
button1: لتنفيذ الاستعلام

بالتوفيق أخي
الرد
#4
السلام عليكم...

إذا كان الاسم يتكون فقط من الاسم الأول و اللقب و بينهما فراغ فيمكن استعمال الدالة Pos لإيجاد الفراغ و فصل الجزأين.
كمثال: اكتب الإجراء التالي في القسم implementation:
كود :
procedure SeparateNameParts(AFullName: string; var AFirstName, ALstName: string); var SpcPos: Integer; begin AFullName := Trim(AFullName); if AFullName = '' then begin AFirstName := ''; ALstName := ''; end else begin SpcPos := Pos(' ', AFullName); if SpcPos = 0 then begin AFirstName := AFullName; ALstName := ''; end else begin AFirstName := Copy(AFullName, 1, SpcPos - 1); ALstName := Copy(AFullName, SpcPos + 1, Length(AFullName) - SpcPos); end; end; end;

و بافتراض أن لدي 3 مكونات TEdit (حيث Edit1 للاسم الكامل، و Edit2 للاسم الأول، و Edit3 للقب) فإننا نستدعي الدالة السابقة هكذا:
كود :
procedure TForm1.Button1Click(Sender: TObject); var FirstName, LastName: string; begin SeparateNameParts(Edit1.Text, FirstName, LastName); Edit2.Text := FirstName; Edit3.Text := LastName; end;

*** لكن المشكلة - كما أشار أخونا makhlouf - أن هناك العديد من الأسماء المركبة (الاسم الأول أو اللقب) مثل نور الدين و نجم الدين و نور الهدى... إلخ. بعض الناس يكتب الجزأين متلاصقين (نورالدين) و البعض يكتبهما منفصلين بفراغ (نور الدين) و أحياناً وجود الفراغ يكون إجبارياً كما في نجم الدين (لا يمكننا كتابته هكذا: نجمالدين، دون فراغ بين الجزأين).

*** نصيحتي لصاحب السؤال: إذا كانت الأسماء ستخزن في جدول قاعدة بيانات فاجعل للاسم أكثر من خانة (حسب حاجة برنامجك) مثلاً حقل للاسم و حقل للقب (الاسم الثنائي) أو حقل للاسم و حقل لاسم الأب و حقل للقب (الاسم الثلاثي) أو حقل للاسم و حقل لاسم الأب و حقل لاسم الجد و حقل للقب (الاسم الرباعي) و طبعاً سيكون لديك خانات مقابلة لها في نوافذ برنامجك.
و يمكنك بسهولة الحصول على الاسم الكامل (كنص واحد) عن طريق إنشاء استعلام (Query في Access أو View في SQL Server). مثلاً نفرض أن اسم الجدول هو Students و حقل الاسم الأول هو FirstName و حقل اسم الأب هو FatherName و حقل اللقب هو LastName. إذن ستكون جملة الاستعلام كالتالي:
كود :
SELECT Students.*, Student.FirstName + ' ' + Student.FatherName + ' ' + Student.LastName AS FullName FROM Student
حيث ستعيد لك هذه الجملة جميع الحقول الموجودة في الجدول بالإضافة إلى الحقل FullName (أو أي اسم ستسميه) لتستعمله في العرض في برنامجك.

نرجو الاستفادة و السلام.
الرد
#5
السلام عليكم ورحمة الله
ليسمح لي الاخوة بالتطفل على موائدكم الطيبة
لنفرض ان لدينا الاسم التالي

سيف الدين نصر الاسلام


طرح الفكرة

البحث عن دالة عكسية البحث عن الفراغ

1 - البحث عن اخر فراغ
2- البحث عن عدد الفراغات مثلا عندنا اريعة
3-الغاء الغراغين الثالث او الثاني
4- وضع قائمة اسماء في ملف مرجعي

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

والله الموفق
الرد
#6
السلام عليكم

كود :
var myList : TStringDynArray; I : Integer; begin mylist := (SplitString(Edit1.Text,' ')); for I := 0 to Length(mylist)-1 do showMessage(mylist[i]); end;

يمكن استخدام رموز اخرى بدل المسافة مثلاً
كود :
mylist := (SplitString(Edit1.Text,';'));

لاتنسى اضافة
كود :
Types , StrUtils
الى الوحدات
الرد
#7
الله يجزيكم كل خير ويجعلها في ميزان حسناتكم
شكرا لكم مرة اخرى Najy Ibraheem , عبد الهادي , m.rabee ,NOURI , makhlouf
الرد
#8
وانت ايضا نشكرك اخي الكريم فريد لطرحك المشكلة للحل

اخي الكريم m.rabee

يطالبني دلفي بتعريف الوحدة Split عند السطر
mylist := (SplitString(Edit1.Text,' '));

فبالرجاء ان ترشدوني الى تعرفيها فقد كللت محاولاتي بالفشل
الرد
#9
هل اضفت
كود :
StrUtils
الى قسم الوحدات؟
الرد
#10
بارك الله فيكم اخي الكريم
نعم فعلت ماقلت لي بالحرف يعني اضفته
لكنه يطالبني بتعريف الوحدة Split عند السطر
mylist := (SplitString(Edit1.Text
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم