19-07-2010, 11:43 PM
السلام عليكم
آسف ليس لدي خبرة في التعامل مع صيغة JSON، إلا اني قمت ببعض التعديل على برنامجك المرفق، واشتغل مع بعد التعديل باستخدام دلفي 6.
أولا: لنعيد صياغة البيانات كالتالي:
ونحفظها باسم : ansi.json
التعريفات الأولى كالتالي:
تم إجرائية قراءة الملف:
و إجرائية حفظ الملف باسم آخر، واستبدال ":" بـ "=" عند صياغة البنود :
نظرا لتشغيلي للبرنامج على دلفي 6 وليس دلفي 2010، بغض التغييرات قد تمت أهمها:
استبدال: for Student in StudentList do بما يؤدي عملها
وقف محددات الكومبايلر في الإجرائية : TSuperAvlEntry.Hash
في ملف المكتبة: unit superobject كالتالي:
آسف ليس لدي خبرة في التعامل مع صيغة JSON، إلا اني قمت ببعض التعديل على برنامجك المرفق، واشتغل مع بعد التعديل باستخدام دلفي 6.
أولا: لنعيد صياغة البيانات كالتالي:
PHP كود :
[
{ "name":"اولي/01",
"gradeid":"10",
"limit":"1"
},
{ "name":"اولي/02",
"gradeid":"20",
"limit":"2"
},
{ "name":"اولي/03",
"gradeid":"30",
"limit":"2"
},
{ "name":"اولي/04",
"gradeid":"40",
"limit":"2"
},
{ "name":"اولي/05",
"gradeid":"50",
"limit":"2"
},
{ "name":"اولي/06",
"gradeid":"60",
"limit":"2"
}
]
ونحفظها باسم : ansi.json
التعريفات الأولى كالتالي:
PHP كود :
type
TStudent = record
name: String[20];
gradeid: shortInt;
limit: shortInt;
end;
TStudentList = array of TStudent;
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Memo2: TMemo;
Button2: TButton;
Button3: TButton;
Button4: TButton;
btRead: TButton;
btWrite: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure btReadClick(Sender: TObject);
procedure btWriteClick(Sender: TObject);
private
StudentList: TStudentList;
procedure ReadFile(const FileName: String);
procedure SaveFile(StudentList: TStudentList; const FileName: String);
public
end;
تم إجرائية قراءة الملف:
PHP كود :
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;
Memo2.Lines.Add('Name: ' + StudentList[i].name);
Memo2.Lines.Add('gradeid: ' + IntToStr(StudentList[i].gradeid));
Memo2.Lines.Add('limit: ' + IntToStr(StudentList[i].limit));
end;
finally
end;
end;
end;
و إجرائية حفظ الملف باسم آخر، واستبدال ":" بـ "=" عند صياغة البنود :
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;

