چطور یه عدد رو در فایل جایگزین یک عدد دیگه بکنم؟
Procedure FileChangeFirstWord(FileName:String;W1,W2:Word);
var
fs: TFileStream;
I:LongWord;
W:Word;
begin
fs := TFileStream.Create(FileName, fmOpenReadWrite or fmShareDenyNone);
try
For I:=0 To (fs.Size Div 2)-1 Do
Begin
//fs.Seek(I, soFromBeginning);
fs.Position:=I;
fs.ReadBuffer(W,2);
If W=W1 then
Begin
fs.Position:=I;
fs.WriteBuffer(W2,2);
Exit;
End;
End;
finally
fs.free;
end;
end;
سلام
چرا برنامه به خط TFileStream.Create گیر میده.
آیا استفاده از fs.Position به جای seek اشکال داره؟
و وقتی Exit اجرا میشه فایل بسته خواهد شد؟
کسی میتونه کد درست رو برام بذاره؟
نقل قول: چطور یه عدد رو در فایل جایگزین یک عدد دیگه بکنم؟
شما وقتی بافر رو میخونی خود به خود پوینتر 2 واحد میره جلو و برای همین روی پوزیشن خطا میخوره
در ضمن شما دو بایت میخونی باز میری روی I ؟؟
نقل قول: چطور یه عدد رو در فایل جایگزین یک عدد دیگه بکنم؟
بله متوجه شدم که نباید دو تا دو تا بخونم.اما سوال اصلیم این نبود.برنامه به سطر ایجاد فایل گیر میده. نمی دونم کدی که قبل از این پروسیجر اجرا میشه ایراد داشته یا نه؟(باید این پروسیجر رو مستقل اجرا کنم)
Function FileHasWord(FileName:String;W:Word):Boolean;
var
fs: TFileStream;
I:LongWord;
W2:Word;
begin
Result:=False;
fs := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
try
For I:=0 To (fs.Size Div 2)-1 Do
Begin
//fs.Seek(I, soFromBeginning);
fs.Position:=I;
fs.ReadBuffer(W2,2);
If W2=W then
Begin
Result:=True;
Exit;
End;
End;
finally
fs.free;
end;
end;
اینکه می پرم جای قبلی به خاطر جایگزنینه.
میتونم ابتدای پروسیجر بالا رو اینطور تغییر بدم
fs := TFileStream.Create(FileName, fmOpenReadWrite);
try
For I:=0 To fs.Size-1 Do
حد اقل بگید ساختار باز کردن فایل درسته یا نه؟من می ترسم با این پروسیجر FileHasWord فایل درست بسته نشده باشه!؟
نقل قول: چطور یه عدد رو در فایل جایگزین یک عدد دیگه بکنم؟
کسی راهنمایی نمی کنه؟
چطور یک عدد رو در فایل پیدا کنیم و با یک عدد دیگه جایگزین کنیم؟
نقل قول: چطور یه عدد رو در فایل جایگزین یک عدد دیگه بکنم؟
این کد نحوه باز کردن فایل و نمایش بایت ها بصورت HEX هست
امیدوارم کمک کنه
procedure TForm1.FileViewHex(FileName: string);
const
MaxLineLength = 16 * 3; // each byte displayed with 2 characters plus a space
BufferSize = 4096;
var
DataFile: File;
Buffer: array[1..BufferSize] of byte;
BytesRead, I: integer;
HexByte, Line: string;
begin
AssignFile(DataFile, FileName);
Reset(DataFile, 1);
Memo1.Clear;
while not Eof(DataFile) do begin
BlockRead(DataFile, Buffer, BufferSize, BytesRead);
Line := '';
for I := 1 to BytesRead do begin
HexByte := IntToHex(Buffer[I], 1); // convert a byte to hexadecimal
// Add leading 0 if result is shorter than 2, easier to read...
if Length(HexByte) < 2 then HexByte := '0' + HexByte;
Line := Line + HexByte + ' ';
if Length(Line) >= MaxLineLength then begin
Memo1.Lines.Add(Line);
Line := '';
end;
end;
end;
// If not already added, add last line to TMemo
if Length(Line) > 0 then Memo1.Lines.Add(Line);
CloseFile(DataFile);
end;
نقل قول: چطور یه عدد رو در فایل جایگزین یک عدد دیگه بکنم؟
ممنون.اما جواب سوالم این نیست. دیگه دارم فکر می کنم شاید غیر ممکنه فایل رو باز کرد یه عدد در اون پیدا کرد و با یه عدد دیگه جایگزین کرد.چون یه سوال خیلی ساده است.
نقل قول: چطور یه عدد رو در فایل جایگزین یک عدد دیگه بکنم؟
سلام. غیر ممکن چی؟
دقیقا مشکلت در کدوم قسمته؟ طول عددت رو از قبل می دونی یا نه؟
نقل قول: چطور یه عدد رو در فایل جایگزین یک عدد دیگه بکنم؟
درود
اول باید باید ساختار فایل رو بدونید.ساختار فایل متنی هستش یا باینری؟
اگر متنی بود مثلا خط به خط یا کلمه به کلمه میخونید . بعد که عدد مورد نظر پیدا شد ، جایگزینش میکنید .
اگر باینری بود باید توجه کرد به چه فرمتی ذخیره شده .