PDA

View Full Version : سوال: خواندم و نوشتن در فایل



joooje
چهارشنبه 09 شهریور 1390, 17:19 عصر
سلام به همه دوستان و تبریک عید
من میخوام بتونم که یه فایل ایجاد کنم و توی اون بتونم هر کدوم از 255 کارکتر رو با دادن عددش بنویسم
میخواستم ببینم چطور میشه این کار رو کرد
و یا اینکه از یه فایل کارکترهاشو بخونم و یکی یکی اونها رو به عدد به دست بیارم
جستجو کردم
این یه کدی بود برای نوشتن پیدا کردم که البته کار نمیده و چیز عجیی رو توی فایل مینویسه و فایل رو هم خودش نمیسازه




var
testf:TFileStream;
str,str1:String[15];
begin
str:='My text';
testf:=TFileStream.Create('C:\Users\Javad\Desktop\ nh.txt',fmOpenWrite);
testf.Seek(0,soFromEnd);
testf.Write(str,sizeof(str)); //// For Write any words
testf.Seek(-sizeof(str),soFromEnd);
testf.Read(str1,sizeof(str)); //// For read any words
testf.Free;
ShowMessage(str1);


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



var
Ansi: AnsiChar;
File1: TFileStream;
B1: array of Byte;
Address:String;
j,cod:integer;
begin
File1:= TFileStream.Create(Address, fmOpenRead);
SetLength(B1, File1.Size);
File1.ReadBuffer(B1[0], Length(B1));
for j:=Low(B1) to High(B1) do
begin
Ansi := Char(B1[j]) ;
cod := ord(Ansi)
ShowMessage(inttostr(ord(Ansi)));
end;
end;

چون درست کار میداد
البته این از کمک ها و راهنمایی های قدیمی آقای تاجیک برای یه کار دیگه بود که من با تغییرش این کد رو نوشتم بازم ازشون ممنونم
ولی نمیدونم که برای این کار همین روش درست هست یانه
ممنون میشم راهنمایی کنید و برای نوشتن تو فایل یه کد قرار بدید
بازم ممنون

Felony
چهارشنبه 09 شهریور 1390, 18:07 عصر
برای ذخیره :

procedure Save(const FileName: string; Const CharNO : Byte);
begin
with TStringList.Create do
try
Add(Chr(CharNO));
SaveToFile(FileName);
finally
Free;
end;
end;

برای بارگذاری :

function Load(const FileName: string): string;
var
LineNO: Integer;
begin
with TStringList.Create do
try
LoadFromFile(FileName);
for LineNO := 0 to Count - 1 do
Result:= Result + IntToStr(Ord(Strings[LineNO][1])) + ',';
finally
Free;
end;
end;

نمونه استفاده :

Save('D:\a.txt', 255);
ShowMessage(Load('D:\a.txt'));

joooje
پنج شنبه 10 شهریور 1390, 20:19 عصر
سلام و ممنون از راهنماییتون
من برای استفاده از کد اول میخوام که بتونم مثلا یه متن رو به وسیله اعداد کاکتر هاش تو فایل بنویسم
که نتونستم از این کدتون استفاده کنم
اون رو به اینصورت به کار بردم و تونستم به هدفم برسم



procedure Save(const FileName: string; Const CharNO : Byte);
begin
with
TStringList.Create do
try
Add(Chr(15)+Chr(34)+Chr(15)+Chr(34));
SaveToFile(FileName);
finally
Free;
end;
end;


ولی اگر بخوام یه حلقه براش بنویسم که خودش یکی یکی اعداد رو بگیره و کارکترش رو تو فایل اضافه کنه چیکار باید بکنم؟
و همینطور در کد دوم
اگر بخوام یه حلقه بسازم که تمام کارکتر ها رو از اول یکی یکی بخونه و بهم بگه چیکار کنم
چون تو این کد شما یه حلقه دارید که به تعداد خطها تنها کارکتر اول رو نمایش میده
حالا اگر بخوام یه حلقه دیگه توش بزارم که اون کارکتر اول رو به ترتیب عوض کنه مشکلم اینه که حلقه دوم رو باید به طول خط اول تکرار کنم
که نمیدونم الان Length خط اول رو چطور بدست بیارم؟
ممنون میشم راهنمایی کنید

Felony
جمعه 11 شهریور 1390, 00:58 صبح
برای نوشتن در فایل :

var
AssciCode: Integer;
Str: String;
begin
Str:= '';
with TStringList.Create do
try
repeat
AssciCode := StrToInt(InputBox('', 'Enter charecter assci code :', '0'));
if AssciCode <> 0 then
Str := Str + (Chr(AssciCode)) + ',';
until AssciCode = 0;
Text:= Str;
SaveToFile('D:\a.txt');
finally
Free;
end;
end;



برای خواندن :

var
I: Integer;
begin
with TStringList.Create do
try
LoadFromFile('D:\a.txt');
DelimitedText:= Text;
for I := 0 to Count - 1 do
ShowMessage(IntToStr(Ord(Strings[I][1])));
finally
Free;
end;
end;