PDA

View Full Version : روش باز کردن و خواندن یک فایل txt از sd card برای چندین بار



arman.m.80
پنج شنبه 26 آذر 1394, 18:52 عصر
من توی یک برنامه نیاز پیدا کردم که از یک فایل txt که روی sd card قرار دارد یک عدد رو بخونم (پشت سر هم) کلا کار برنامه همینه که یک عدد رو که روی مموری هستش بخونم و آن را نمایش بدهم ولی مشکل اینجاست که اون عدد هر ثانیه عوض میشود ولی توی دلفی وقتی فایلو میخونم دفعه ی بعد که میخونم همون مقدار قبلیو بهم نمایش میده و عدد جدید داخل فایلو نمایش نمیده.:متفکر:
لطفا راهنمایی کنید من میخوام اون عدد را پست سر هم بخونم ولی عدد واقعی درون فایلو بخونه.:ناراحت:
با تشکر.

ابوالفضل عباسی
سه شنبه 01 دی 1394, 12:06 عصر
سلام
شما کد خواندن فایل txt رو اینجا بگذار ببینم دستورت درست هست یانه؟!
بهتره برای خوندن، اون رو وارد stream بریزی و یا اگر درون memo میگذاری،اول memo رو خالی کنی بعد بخونی باروش loadfromfile
در تایمر این فرمان ها اجرا بشه.

arman.m.80
سه شنبه 01 دی 1394, 13:42 عصر
من با memo این کارو انجام میدم ولی بعد از پاک کردن نوشته memo دوباره بعد از loadfromfile همون مقدار قبلیو بهم نشون میده و مقدار جدید نمیاید.
توی تامر هم گذاشتم ولی باز هم جواب نداد.
روش stream چجوریه؟ من با اون کار نکردم.

ابوالفضل عباسی
سه شنبه 01 دی 1394, 16:07 عصر
مطمئن هستی مقدار txt موردنظر تغییر پیدا کرده؟
چون وقتی مقدار txt تغییر پیدا میکنه باید مقدار تغییر پیداکرده txt رونشون بده.
روش stream هم در همین بخش جستوجو کنی هست.

arman.m.80
سه شنبه 01 دی 1394, 16:51 عصر
برای بار اول مقدار درستو نمایش میده اما بعد از اون دیگه مقدار درستو نمایش نمیده و مقدار اول رو نشون میده.
روش stream هم گشتم ولی پیدا نکردم.

ابوالفضل عباسی
سه شنبه 01 دی 1394, 17:08 عصر
بفرمایید این هم کد کامل ذخیره و بازیابی رشته String به stream:
فقط ادرس فایل تکست رو میدهی تا اون رو به stream تبدیل کنه و بعد stream رو بخون(ولی عجیبه که memo تغییر نمیکنه،قبل از استفاده از stream یک بار memo رو خالی کن و destroy هم بکن و دوباره پرکن.اگر درست عمل نکرد از stream استفاده کن.)

procedure SaveData(FileName: TFileName);var
MemStr: TMemoryStream;
Title: String;
begin
MemStr:= TMemoryStream.Create;
try
MemStr.Seek(0, soFromBeginning);
WriteStreamStr( MemStr, TItle );
MemStr.SaveToFile(FileName);
finally
MemStr.Free;
end;
end;


procedure LoadData(FileName: TFileName);
var
MemStr: TMemoryStream;
Title: String;
begin
MemStr:= TMemoryStream.Create;
try
MemStr.LoadFromFile(FileName);
MemStr.Seek(0, soFromBeginning);
Title := ReadStreamStr( MemStr );
finally
MemStr.Free;
end;
end;

procedure WriteStreamInt(Stream : TStream; Num : integer);
{writes an integer to the stream}
begin
Stream.WriteBuffer(Num, SizeOf(Integer));
end;


procedure WriteStreamStr(Stream : TStream; Str : string);
{writes a string to the stream}
var
StrLen : integer;
begin
{get length of string}
StrLen := Length(Str);
{write length of string}
WriteStreamInt(Stream, StrLen);
if StrLen > 0 then
{write characters}
Stream.Write(Str[1], StrLen);
end;


function ReadStreamInt(Stream : TStream) : integer;
{returns an integer from stream}
begin
Stream.ReadBuffer(Result, SizeOf(Integer));
end;


function ReadStreamStr(Stream : TStream) : string;
{returns a string from the stream}
var
LenStr : integer;
begin
Result := '';
{get length of string}
LenStr := ReadStreamInt(Stream);
{set string to get memory}
SetLength(Result, LenStr);
{read characters}
Stream.Read(Result[1], LenStr);
end;

ali guard
یک شنبه 20 دی 1394, 10:06 صبح
memo را Memo1.Refresh; بكنيد

ابوالفضل عباسی
چهارشنبه 23 دی 1394, 15:04 عصر
دوست عزیز این عمل وقتی که برای پرکردن دستور load رو در تایمر میدهی.خودش memo را رفرش میکند.
ولی امتحانش ضرری نداره،ولی با روش stream درست کار میکنه.

arman.m.80
چهارشنبه 23 دی 1394, 15:43 عصر
ممنون من باروش stream تست کردم درست کار کرد و مشکلم حل شد.
با تشکر.:لبخندساده:

ابوالفضل عباسی
چهارشنبه 23 دی 1394, 16:24 عصر
خواهش میکنم
روش stream موقعی که توی تایمر اجرا میشه،باعث کندی برنامه و گوشی نمیشه دوست عزیز؟

arman.m.80
پنج شنبه 24 دی 1394, 19:37 عصر
کاملا درسته توی کار برنامه وقفه ایجاد میکنه و کلا سرعت برنامه یک سوم میشه ولی با توجه به این که کار اصلی برنامه همینه و برنامه برای کسی نوشته شده و قابل ارایه به عموم نیست و فقط هم در کل برنامه 2 عدد Button وجود دارد و در کل به جز این که هر 5 میلی ثانیه یک فایلو میخونه و هر 1 ثانیه یک فایلو مینویسه دیگه کار خاصی انجام نمیده.
با تشکر.:لبخندساده:

ابوالفضل عباسی
شنبه 26 دی 1394, 14:00 عصر
خواهش میکنم ولی سعی کن از stream استفاده نکنی تا سرعت افت نکنه