procedure TForm1.btReadClick(Sender: TObject); begin readfile('Ansi.json'); end;
procedure TForm1.ReadFile(const fileName : String); var i: integer; obj: ISuperObject; item: TSuperTableString; objArray: TSuperArray; Text: String; begin if FileExists(fileName) Then begin SetLength(StudentList, 0); try Text := fileAsText(fileName);
if trim(Text) = '' then exit; Memo1.Clear; Memo1.Lines.Add(Text);
obj := SO(Text); if obj = nil then begin Memo2.Clear; Memo2.Lines.Add('ISuperObject = nil'); exit; end;
objArray := obj.AsArray; if objArray = nil then begin Memo2.Clear; Memo2.Lines.Add('List = 0'); exit; end;
SetLength(StudentList, objArray.Length); for i := 0 to objArray.Length - 1 do begin item := objArray[i].AsObject; StudentList[i].name := item['name'].AsString; StudentList[i].gradeid := item['gradeid'].AsInteger; StudentList[i].limit := item['limit'].AsInteger;
و إجرائية حفظ الملف باسم آخر، واستبدال ":" بـ "=" عند صياغة البنود :
PHP كود :
procedure TForm1.btWriteClick(Sender: TObject); begin SaveFile(StudentList, 'Ansi2.json'); end;
procedure TForm1.SaveFile(StudentList: TStudentList; const FileName: String); var Student: TStudent; i: integer; j: integer; cnt: integer; s, rec: String; begin if Length(StudentList) = 0 then exit; try s := '['; i := 0; cnt := Length(StudentList); for j := 0 to cnt-1 do //for Student in StudentList do begin Student := TStudent(StudentList[j]); if i > 0 then s := s + ','; rec := '{"name":"' + Student.name + '",'; rec := rec + '"gradeid":"' + IntToStr(Student.gradeid) + '",'; rec := rec + '"limit":"' + IntToStr(Student.limit) + '"}';
S := s + rec; inc(i) end; s := s + ']'; finally end; textAsFile(s, FileName);
end;
نظرا لتشغيلي للبرنامج على دلفي 6 وليس دلفي 2010، بغض التغييرات قد تمت أهمها:
استبدال: for Student in StudentList do بما يؤدي عملها
وقف محددات الكومبايلر في الإجرائية : TSuperAvlEntry.Hash
في ملف المكتبة: unit superobject كالتالي:
PHP كود :
class function TSuperAvlEntry.Hash(const k: SOString): Cardinal; var h: cardinal; i: Integer; begin h := 0; //{$Q-} // shag for i := 1 to Length(k) do h := h*129 + ord(k[i]) + $9e370001; //{$Q+} Result := h; end;
20-07-2010, 08:13 AM (آخر تعديل لهذه المشاركة: 10-03-2011, 02:06 PM بواسطة kachwahed.)
السلام عليكم ورحمة الله وبركاته
ما شاء الله عليك يا أستاذ خالد وفّيت وكفّيت
أنا كنت أستخدم نفس الـ ISuperObject في تفسير نص JSON ولكني توقفت عن البرمجة به لمدة أسبوعين فنسيت كيفية صياغة JSON فوضعت = موضع : فوقع الخطأ غير المتوقع فجربت أشياء كثيرة ولم تنفع .
والذي يفهم البرمجة بالجافاسيكريبت يعرف كيف يصاغ الكائن فيها، و JSON هي مجرد كائن جافا سيكربت بين علامتين تنصين ' ' .
أنا أهيب بالأخوة استخدام JSON ففيها فوائد كثيرة للمبرمج.
وهذا الموقع يشرح كيفية استخدام الوحدة superObject.pas