قمت بتحميل ملف نصي txt يضم مجموعة من البينات تضم كل المدن والقرى حول العالم هذا مثلا سطر من الأسطر :
RC UFI UNI LAT LONG DMS_LAT DMS_LONG UTM JOG FC DSG PC CC1 ADM1 ADM2 DIM CC2 NT LC SHORT_FORM GENERIC SORT_NAME FULL_NAME FULL_NAME_ND MODIFY_DATE 3 -3096949 -4370067 21.4266667 39.8261111 212536 394934 ED86 NF37-11 P PPL SA 14 V MAKKAHALMUKARRAMAH Makkah al Mukarramah Makkah al Mukarramah 2004-04-13
السطر يعرض معلومات حول الموفع الجغرافي لمدينة مكه المكرمة ويعطي الإحداثياث الجغرافية من خط الطول وخط العرض مع الإسم للموقع ومعلومات أخرى.
هذا هو الموقع لمن أراد تحميل ملف مضغوط لكل دولة:
ftp://ftp.nga.mil/pub/gns_data/
أنا قمت بتحميل الملف لكل بلدان العالم, عند فك ضغطه وجدته ملف txt يفوق حجمه 700MB.
كل سطر من لأسطر يضم معلومات مرتبة ويفرق بين معلومة ومعلومة المحرف tabulation او بالكود ascii هو المحرف 09#.
إستعملت TfileStream للإستفادة من هذه الحقول و وضعها في TStringsList بواسطة هذه الإجرائية:
var str_list: TStringList; MyStreamFile: TFileStream; procedure ReadBuffLn; var i: integer; Pstr, Start: PChar; StrTemp: String; BuffChar: array of char; begin i:=0; SetLength(BuffChar,2048); repeat MyStreamFile.Read(BuffChar,1); inc(i); Pstr := @BuffChar[i-2]; until ((AnsiStrComp(Pstr,sLineBreak)=0 )or(MyStreamFile.Position= (MyStreamFile.Size-1))); BuffChar:=#0; str_list.Clear; Pstr := pchar(BuffChar); while Pstr^ <> #0 do begin Start := Pstr; while not (Pstr^ in [#0, #9,#13,#10]) do Inc(Pstr); SetString(StrTemp, Start, Pstr - Start); str_list.Add(StrTemp); if Pstr^ = #9 then Inc(Pstr); if Pstr^ = #10 then Inc(Pstr); if Pstr^ = #13 then Inc(Pstr); end; end;
هذه الإجرائية لم تنفعني عندما إستعملتها على المف الكبير الحجمو لكنها عملية جدا في الملفات الصغيرة لكل دولة عل حدة.
المرجو مساعدتي اليوم قبل الغذ B) هههههههه
هذه الملفات اردت أن أستعملها في مشروع مواقيت الصلاة الموجود في نفس القسم من المنتدى.
مشكورين

