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

قراءة من ملف يحتوي على بيانات binary

بدأه mohamed.dz في 30 أغسطس 2010 · 2 رد · 1,008 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

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

أريد عمل بريمج صغير يقوم بنقل البيانات من ملف ناتج عن برنامج محاسبة يعمل على الدوس (DOS) إلى ملف TXT بحيث يمكن استيرادها بواسطة برنامج محاسبي جديد

المشكل أن الملف (في المرفقات نموذج عنه) يحتوي على بيانات نصية أما المبالغ فهي على شكل binary لا يمكن قرائتها مباشرة في TMemo مثلا

وجدت هذا الكود في أحد المنتديات، ولا أدري هل يفيدني أم لا:

function ReadFileToBuffer(FileName: String; var Buffer; PosFrom, Count: Integer): Integer;
var
AStream:TFileStream;
begin
AStream:=TFileStream.Create(FileName,fmOpenRead);
try
Result:=0;
AStream.Seek(PosFrom,soFromBeginning);
Result:=AStream.Read(Buffer,Count);
finally
AStream.Free;
end;
end;

ثم في button1Click نضع :

var
bt:array[0..1047] of Byte;
begin
if ReadFileToBuffer('MyFile.bin',bt[0],32,20)=20
then begin
// 20 bytes from MyFile.bin from position 32 are in array bt
end;
end;

لكن لم أعرف كيف أكمل بعد ذلك

الرجاء المساعدة ولو بفكرة بسيطة

0001.zip

تم تعديل هذه المشاركة بواسطة mohamed.dz في 30 أغسطس 2010 في 16:30

بسم الله الرحمن الرحيم " وقل رب زدني علما"

#2

السلام عليكم

أخي سوف أضع لك دالة يمكنك استخدامها في تجزءة النص الى كلمات و من ثم تغييلر نوعيتها الى أرقام

procedure parse( myFile : string );
var
  txtFile : TextFile;
  FTokenStart , FCurrPos : PChar;
  MyLigne, MyToken : String;


function GetCurrentToken: string;
begin
  SetString(Result, FTokenStart, FCurrPos - FTokenStart);
end;

function GetNextToken: Boolean;
var
  cp: PChar;
begin
  cp := FCurrPos;
  while (cp^ > #0) and (cp^ <= #32) do
    Inc(cp);

  Result := cp^ <> #0;

  if Result then
  begin
    FTokenStart := cp;
    Inc(cp);
    while cp^ > #32 do
      Inc(cp);
  end;

  FCurrPos := cp;
end;

begin

  AssignFile(txtFile, myFile);
  Reset(txtFile);
   while not Eof(txtFile) do
     begin
       ReadLn(txtFile, myLigne);

        FCurrPos := PChar(MyLigne);

         while  GetNextToken do
           begin
             myToken := GetCurrentToken;

               ShowMessage( myToken);

           end;


     end;
    CloseFile(txtFile);





end;

تجد في المتغير myToken كل كلمة في النص

ارجو ان تفيدك

#3

بارك الله فيك أخي على الرد

ضننت أنه لا يوجد من يرد عليّ في هذا المنتدى الذي طالما استفدت منه الكثير

لكن يبدوا أن مثل هذه المشاكل المتعلقة بالدوس قد أكل عليها الدهر وشرب

فيما يخص هذا الكود الذي اقترحته سأجربه وأوافيك بالنتيجة بإذن الله ... لكن بعد الانتهاء من بعض الانشغالات المستعجلة

شكرا لكم ...

بسم الله الرحمن الرحيم " وقل رب زدني علما"

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