الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

البحث في الميمة

بدأه prince of dark في 19 ديسمبر 2010 · 4 رد · 778 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

الموضوع بكل إختصار بأني أقوم بصنع برنامج لتحكم بمكنة cnc مبرمجة في دلفي

ولكني أواجه مشكلة في فرز الإحداثيات الخاصة وهي بشكل نص

وطلبي هو كيفية البحث داخل الميمو علما أن الإحداثات تكون على الشكل التالي :

y200 x450 z-10 أنا تمكنت من البحث لكن كودي لا يستجيب لإحداثية ال (z-) بسبب وجود إشارة الناقص أو الزائد

وهدا بس يلي ناقصني لعمل الألة

وأعدكم يا أصدقائي أن أرفق الكودات وبرنامج تحويل الرسوم لإحداثيات و مخططات الألة للأخوة لتمكين الإستفادة للجميع وشكرا لكم

PRINCE OF DARK

:unsure:

إذا أحببت أحداً فدعه يذهب فإن أحبك عاد وإن لم يعد فأدعو له في السعادة

#2

يا شباب الموضوع كتير هام وين الردود

تم تعديل هذه المشاركة بواسطة prince of dark في 23 ديسمبر 2010 في 18:08

إذا أحببت أحداً فدعه يذهب فإن أحبك عاد وإن لم يعد فأدعو له في السعادة

#3

السالب من ضمن الرقم اي سالب 10 لا يمكن تغييرها الي 10 موجب لانها ستتغير الاحداثيات ، بالنسبة للبحث اكتب كتلة كبيرة من البيانات هنا كما هي موجوة في الميمو حتي اتمكن من تحليلها وكتابة الكود المناسب اما اذا كانت الاحداثات كل مجموعة في سطر فهي بسيطة جدا .

الليك دالة كل ما عليك هو ادخال البلوك النصي ثم المحور ليقوم بارجاع قيمته .

function GetValueOf (BlockStr:String;Dim:String) : String ;
var
  m_Strings : TStrings ;
  I         : Integer ;
  DimIndex  : Integer ;
begin


m_Strings := TStringList.Create ;

Try

m_Strings.Delimiter := ' ';
m_Strings.DelimitedText := BlockStr ;

//Make Dimensions as pairs name=value
for I := 0 to m_Strings.Count - 1 do
   m_Strings :=copy(m_Strings,1,1)+'='+ copy(m_Strings,2,10)  ;

   DimIndex := m_Strings.IndexOfName(Dim) ;
if DimIndex > -1 then
    Result := m_Strings.ValueFromIndex[DimIndex]
    else
    Result := '';




Finally
    m_Strings.Free ;
End;



end;

طريقة الاستدعاء هكذا

edit2.Text := GetValueOf('x201 y800 z-30' , 'y' );

سيقوم بارجاع قيمة y

تحياتي

الإنسان الذي يقول بأنه لا يمكن عمل شيء يجب ألا يعيق مطلقاً الإنسان الذي يقوم بعمل ذلك الشيء.

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

#4

السلام عليكم ورحمة الله وبركاته

شكرا على الرد prof الإحداثيات لدي مقيدة جدا فتكون على الشكل التالي :

G1Z1.000F3000.0

X752.365Y100.445Z0.907

X753.689Y103.909Z0.815

X754.981Y107.394Z0.722

X756.238Y110.898Z0.629

X757.463Y114.421Z0.535

X757.915Y115.767Z0.500

X757.463Y114.421Z0.465

X756.238Y110.898Z0.371

X754.981Y107.394Z0.278

X753.689Y103.909Z0.185

X752.365Y100.445Z0.093

X751.008Y97.000Z-0.000

لدى استخدام الكود المرفق من قبل حضرتكم لم يتمكن البرنامج من التعرف على الإحداثات أعتقد بسبب عدم وجود فراغات بين الإحداثية والأخرى

أرجو الرد السريع وجزاك الله كل الخير

و السلام عليكم ورحمة الله وبركاته

إذا أحببت أحداً فدعه يذهب فإن أحبك عاد وإن لم يعد فأدعو له في السعادة

#5

السلام عليكم...

اكتب الإجراء التالي للحصول على الإحداثيات الثلاثة:

procedure GetCoords(const CoordStr: string; var X, Y, Z: Real);
var
    XPos, YPos, ZPos: Integer;
    MyStr: string;
begin
    X := 0;
    Y := 0;
    Z := 0;
    MyStr := UpperCase(Trim(CoordStr));
    if MyStr = '' then Exit;
    XPos := Pos('X', MyStr);
    YPos := Pos('Y', MyStr);
    ZPos := Pos('Z', MyStr);
    if (XPos = 0) or (YPos = 0) or (ZPos = 0)then Exit;
    X := StrToFloat(Copy(MyStr, XPos + 1, YPos - XPos - 1));
    Y := StrToFloat(Copy(MyStr, YPos + 1, ZPos - YPos - 1));
    Z := StrToFloat(Copy(MyStr, ZPos + 1, Length(MyStr) - ZPos));
end;

و هذا مثال لاستدعاء الإجراء و وضع الإحداثيات في ListBox. لاحظ أن البارامترات X و Y و Z معرفة على أنها بارامترات متغيرة، أي يجب أن تمرر للإجراء ثلاث متغيرات حتى يتم تخزين القيم فيها:

procedure TFRtlForm1.Button1Click(Sender: TObject);
var
    Idx: Integer;
    X, Y, Z: Real;
begin
    ListBox1.Clear;
    for Idx := 0 to Memo1.Lines.Count - 1 do begin
        if UpperCase(Trim(Copy(Memo1.Lines[Idx], 1, 1))) = 'X' then begin
            GetCoords(Memo1.Lines[Idx], X, Y, Z);
            ListBox1.Items.Add('X = ' + FloatToStr(X) + ', Y = ' + FloatToStr(Y) + ', Z = ' + FloatToStr(Z));
        end;
    end;
end;

نرجو الاستفادة و السلام.

وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ

صدق الله العظيم

مواضيع مشابهة