السلام عليكم
هل يمكنني فصل الأسم اللقب عن بعضهما موجودان مع بعض في حقل واحد
ليكون الأسم في حقل منفصل
و اللقب في حقل منفصل
جزاكم الله كل الحير
سلام عليكم
استعمل الكود التالي
var s : string ;
begin
s:= 'delphiarabe' ;
insert ( ' ' ,s,7);
form1.Caption := s;
و عليكم السلام و رحمة الله تعالى و بركاته:
أخي مجرد محاولة يمكن أن تنفعك أو تتخذهامنطلقا لتجد الحل الصحيح و تفيدنا به.
أخي مثالي هذا في حالة أسماء ثنائية أي الاسم و اللقب و لكن الاشكال هو في حالة اللقب مركب أو الاسم مركب نرجو من الخبراء إفادتنا به.
كود :
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: لتنفيذ الاستعلام
بالتوفيق أخي
السلام عليكم...
إذا كان الاسم يتكون فقط من الاسم الأول و اللقب و بينهما فراغ فيمكن استعمال الدالة 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 (أو أي اسم ستسميه) لتستعمله في العرض في برنامجك.
نرجو الاستفادة و السلام.
السلام عليكم ورحمة الله
ليسمح لي الاخوة بالتطفل على موائدكم الطيبة
لنفرض ان لدينا الاسم التالي
سيف الدين نصر الاسلام
طرح الفكرة
البحث عن دالة عكسية البحث عن الفراغ
1 - البحث عن اخر فراغ
2- البحث عن عدد الفراغات مثلا عندنا اريعة
3-الغاء الغراغين الثالث او الثاني
4- وضع قائمة اسماء في ملف مرجعي
وهذه مجرد فكرة قد تنفع من يهتم بالموضوع
والله الموفق
السلام عليكم
كود :
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,';'));
لاتنسى اضافة
الى الوحدات
الله يجزيكم كل خير ويجعلها في ميزان حسناتكم
شكرا لكم مرة اخرى Najy Ibraheem , عبد الهادي , m.rabee ,NOURI , makhlouf
وانت ايضا نشكرك اخي الكريم فريد لطرحك المشكلة للحل
اخي الكريم m.rabee
يطالبني دلفي بتعريف الوحدة Split عند السطر
mylist := (SplitString(Edit1.Text,' '));
فبالرجاء ان ترشدوني الى تعرفيها فقد كللت محاولاتي بالفشل
بارك الله فيكم اخي الكريم
نعم فعلت ماقلت لي بالحرف يعني اضفته
لكنه يطالبني بتعريف الوحدة Split عند السطر
mylist := (SplitString(Edit1.Text