روش باز کردن و خواندن یک فایل txt از sd card برای چندین بار
من توی یک برنامه نیاز پیدا کردم که از یک فایل txt که روی sd card قرار دارد یک عدد رو بخونم (پشت سر هم) کلا کار برنامه همینه که یک عدد رو که روی مموری هستش بخونم و آن را نمایش بدهم ولی مشکل اینجاست که اون عدد هر ثانیه عوض میشود ولی توی دلفی وقتی فایلو میخونم دفعه ی بعد که میخونم همون مقدار قبلیو بهم نمایش میده و عدد جدید داخل فایلو نمایش نمیده.:متفکر:
لطفا راهنمایی کنید من میخوام اون عدد را پست سر هم بخونم ولی عدد واقعی درون فایلو بخونه.:ناراحت:
با تشکر.
نقل قول: روش باز کردن و خواندن یک فایل txt از sd card برای چندین بار
سلام
شما کد خواندن فایل txt رو اینجا بگذار ببینم دستورت درست هست یانه؟!
بهتره برای خوندن، اون رو وارد stream بریزی و یا اگر درون memo میگذاری،اول memo رو خالی کنی بعد بخونی باروش loadfromfile
در تایمر این فرمان ها اجرا بشه.
نقل قول: روش باز کردن و خواندن یک فایل txt از sd card برای چندین بار
من با memo این کارو انجام میدم ولی بعد از پاک کردن نوشته memo دوباره بعد از loadfromfile همون مقدار قبلیو بهم نشون میده و مقدار جدید نمیاید.
توی تامر هم گذاشتم ولی باز هم جواب نداد.
روش stream چجوریه؟ من با اون کار نکردم.
نقل قول: روش باز کردن و خواندن یک فایل txt از sd card برای چندین بار
مطمئن هستی مقدار txt موردنظر تغییر پیدا کرده؟
چون وقتی مقدار txt تغییر پیدا میکنه باید مقدار تغییر پیداکرده txt رونشون بده.
روش stream هم در همین بخش جستوجو کنی هست.
نقل قول: روش باز کردن و خواندن یک فایل txt از sd card برای چندین بار
برای بار اول مقدار درستو نمایش میده اما بعد از اون دیگه مقدار درستو نمایش نمیده و مقدار اول رو نشون میده.
روش stream هم گشتم ولی پیدا نکردم.
نقل قول: روش باز کردن و خواندن یک فایل txt از sd card برای چندین بار
بفرمایید این هم کد کامل ذخیره و بازیابی رشته 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;
نقل قول: روش باز کردن و خواندن یک فایل txt از sd card برای چندین بار
memo را Memo1.Refresh; بكنيد
نقل قول: روش باز کردن و خواندن یک فایل txt از sd card برای چندین بار
دوست عزیز این عمل وقتی که برای پرکردن دستور load رو در تایمر میدهی.خودش memo را رفرش میکند.
ولی امتحانش ضرری نداره،ولی با روش stream درست کار میکنه.
نقل قول: روش باز کردن و خواندن یک فایل txt از sd card برای چندین بار
ممنون من باروش stream تست کردم درست کار کرد و مشکلم حل شد.
با تشکر.:لبخندساده:
نقل قول: روش باز کردن و خواندن یک فایل txt از sd card برای چندین بار
خواهش میکنم
روش stream موقعی که توی تایمر اجرا میشه،باعث کندی برنامه و گوشی نمیشه دوست عزیز؟
نقل قول: روش باز کردن و خواندن یک فایل txt از sd card برای چندین بار
کاملا درسته توی کار برنامه وقفه ایجاد میکنه و کلا سرعت برنامه یک سوم میشه ولی با توجه به این که کار اصلی برنامه همینه و برنامه برای کسی نوشته شده و قابل ارایه به عموم نیست و فقط هم در کل برنامه 2 عدد Button وجود دارد و در کل به جز این که هر 5 میلی ثانیه یک فایلو میخونه و هر 1 ثانیه یک فایلو مینویسه دیگه کار خاصی انجام نمیده.
با تشکر.:لبخندساده:
نقل قول: روش باز کردن و خواندن یک فایل txt از sd card برای چندین بار
خواهش میکنم ولی سعی کن از stream استفاده نکنی تا سرعت افت نکنه