PDA

View Full Version : سوال: اضافه کردن عدد به اول نوشته در فایل TXT



nsco_nsco
جمعه 16 اردیبهشت 1390, 21:20 عصر
سلام دوستان
یک سوال داشتم چطوری می توانم کاری کنم زمانی که یک نوشته رو برای ذخیره شدن به فایل تی اکس تی می فرستم طبق که هر بار ذخیره می شود یک عدد به پشت نوشته اضاف کند ببنید من به شکل زیر نوشته رو ذخیره می کنم :


Str.Add('HELOO');


پس زمانی که تو فایل ذخیره می شود می شود HELOO
اما من می خوام بشود



1 HELOO


بعدی که ذخیره می شود بشود :


2 KOBY


و حتی اگر بسته هم شود نرم افزار و مجدد باز شود باز هم ادامه بدهد و از عدد بعدی شروع شود و ذخیره کند ممنون می شوم سریع پاسخ بدید با تشکر:تشویق::قلب:

Felony
جمعه 16 اردیبهشت 1390, 21:52 عصر
قبل از این که در فایل درج کنید تعداد خط ها رو بخونید به رشتتون بچسبونید :

Procedure Add2File(FileAddr: String; aString: String);
var
Str: TStringList;
begin
Str:= TStringList.Create;
try
if FileExists(FileAddr) then
Str.LoadFromFile(FileAddr);
Str.Add(IntToStr(Str.Count + 1) + ' ' + aString);
Str.SaveToFile(FileAddr);
finally
Str.Free;
end;
end;

nsco_nsco
شنبه 17 اردیبهشت 1390, 21:32 عصر
قبل از این که در فایل درج کنید تعداد خط ها رو بخونید به رشتتون بچسبونید :

Procedure Add2File(FileAddr: String; aString: String);
var
Str: TStringList;
begin
Str:= TStringList.Create;
try
if FileExists(FileAddr) then
Str.LoadFromFile(FileAddr);
Str.Add(IntToStr(Str.Count + 1) + ' ' + aString);
Str.SaveToFile(FileAddr);
finally
Str.Free;
end;
end;

سلام ممنون از پاسختون ولی من هرچی فکر کردم چیزی از این نفهمیدم ممنون می شوم یکم توضیح بدید با تشکر:قلب:

nsco_nsco
یک شنبه 18 اردیبهشت 1390, 16:57 عصر
سلام دوستان
کسی نیست کمک کنه خیلی لازماته ممنون می شوم بگید :قلب:

SAASTN
یک شنبه 18 اردیبهشت 1390, 21:24 عصر
من درست متوجه نشدم که HELOO و KOBY قراره توی یک فایل ذخیره بشن یا اینکه هرکدوم توی یک فایل مستقل؟

اما توضیح در مورد کد آقای تاجیک با اجازشون:
این کد فرض کرده که همه کلمات قراره توی یک فایل ذخیره بشن؛ در اینجا قراره که به جای Str.Add که گفته بودید دیگه از تابع Add2File استفاده بشه. این تابع هربار که قراره کلمه جدیدی اضافه بشه، فایل رو باز میکنه، تشخیص میده که تا قبل از این چند کلمه اضافه شده بوده، و کلمه جدید رو به انتهای کلمات قبلی اضافه می کنه. در خط 7 بررسی میشه که آیا فایلی در محل تعیین شده برای ذخیره سازی وجود داره یا نه؛ چون ما نمی دونیم این اولین بار هست که تابع فراخونی میشه یا چندمین بار هست و قبلا فایل ایجاد شده. در خط 8 در صورت وجود داشتن فایل، لودش می کنیم(و در غیر اینصورت سطور Str خالی هستند و تعداد سطور 0). در خط 9 تعداد سطور فعلی رو بدست میاریم، با یک جمع می کنیم چون می خوایم کلمه جدیدی اضافه کنیم، عدد بدست اومده رو به رشته تبدیل می کنیم و به همراه کلمه مورد نظر در سطر جدیدی در Str قرار می دیم، و در خط 10 هم که متغیر Str رو در آدرس معین شده ذخیره می کنیم. دیگه بقیه مسائل هم که ایجاد و آزاد سازی اشیاء و مدیریت استثنائات هست.
اما به نظر من فرض این کد اینه که تابع Add2File قراره به تعداد کم و با فواصل زمانی زیاد فراخوانی بشه. چون باز و بسته کردن فایل در هر بار فراخوانی سر بار زیادی ایجاد می کنه.
اگر شما به این مورد در طی یک روند پردازشی نیاز دارید و ممکنه در طی یک یا چند حلقه بارها و بارها کلمات جدیدی به Str اضافه کنید و در انتها تنها یکبار فرمان ذخیره سازی بدید بهتره به روش دیگه ای عمل کنید: در ابتدا به همون روش آقای تاجیک کلمات قبلی رو در Str لود کنید، کلمات جدید رو بدون هیچ پیشوندی به Str اضافه کنید و در هنگام ذخیره سازی به صورت زیر عمل کنید:
var
SavingStr: TStringList;
begin
...
SavingStr := TStringList.Create;
SavingStr.Assign(Str);
for I := 0 to SavingStr.Count - 1 do
SavingStr[I] := Format('%4d %s', [I + 1, SavingStr[I]])
SavingStr.SaveToFile(FileAddr);
SavingStr.Free;
end;


البته اگه منظور ذخیره سازی کلمات در فایلهای مستقل بوده باشه که جریان یه جور دیگه میشه.