Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2010, 19:03   #1
FantomasRUS
 
Регистрация: 29.04.2010
Сообщений: 8
Печаль Почему первый байт пропускает?

Подскажите, почему первый байт пропускает при чтении из файла. К примеру в файле сохранено Павел. А функция ReadForZn(F,32) возвращает "авел" . Где может быть ошибка?
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Memo1: TMemo;
    OpenDialog1: TOpenDialog;
    procedure Button1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  FileName1: string;
  F: File;

implementation

{$R *.dfm}

function ReadForZn(var F:File; Zn: byte): string;
var
  IndStr: Integer;
  Bufer: string[50];
  Buf: byte;
begin
Bufer:= '0';
IndStr:= 0;
while not Eof(F) do
  begin
  BlockRead(F,Buf,1);
  if Buf=Zn then
    begin
    Result:= Bufer;
    Break;
    end;
  Bufer[IndStr]:=Char(Buf);
  Inc(IndStr);
  end;
Result:= Bufer;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  OpenDialog1: TOpenDialog;
  Buf: byte;
  Index: Integer;
begin
OpenDialog1:= TOpenDialog.Create(self);
OpenDialog1.InitialDir := GetCurrentDir;
if OpenDialog1.Execute then
Edit1.Text:= OpenDialog1.FileName;
FileName1:= OpenDialog1.FileName;
OpenDialog1.Free;
AssignFile(F,FileName1);
Reset(F,1);
Index:=0;
{while not Eof(F) do
  begin
  BlockRead(F, Buf, 1);
  if  Buf = 32 then
    begin
    Index:= Index+1;
    Memo1.Lines.Add('');
    BlockRead(F, Buf, 1);
    end; }
  Memo1.Lines[Index]:= ReadForZn(F,32);
  Inc(Index);
  Memo1.Lines.Add('0');

  
//  Memo1.Lines.Add(Char(Buf));
  end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
CloseFile(F);
end;

end.
FantomasRUS вне форума Ответить с цитированием
Старый 12.05.2010, 20:25   #2
W0LF
Форумчанин
 
Аватар для W0LF
 
Регистрация: 28.03.2008
Сообщений: 940
По умолчанию

Если я не ошибаюсь, то строку
Код:
Reset(F,1);
замени на
Код:
Reset(F,0);
W0LF вне форума Ответить с цитированием
Старый 12.05.2010, 21:36   #3
FantomasRUS
 
Регистрация: 29.04.2010
Сообщений: 8
По умолчанию

Цитата:
Сообщение от W0LF Посмотреть сообщение
Если я не ошибаюсь, то строку
Код:
Reset(F,1);
замени на
Код:
Reset(F,0);
Не не правильно. Это процедура сообщает что нужо читать по 1му байту за раз. Я Исправил ошибку
Код:
function ReadForZn(var F:File; Zn: byte): string;
var
  Bufer: string;
  Buf: byte;
begin
Bufer:= '';
while not Eof(F) do
  begin
  BlockRead(F,Buf,1);
  if Buf=Zn then
    begin
    Result:= Bufer;
    Break;
    end;
  Bufer:=Bufer+Char(Buf);
  end;
Result:= Bufer;
end;
FantomasRUS вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск байт Gerzs Общие вопросы Delphi 9 06.11.2009 17:28
Функция, которая пропускает выходные. jungo Microsoft Office Excel 12 25.06.2008 08:59
1 байт 9 бит ?! Иллидан Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 13.04.2008 12:47
байт режима адресации fermat_c Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 10.04.2008 15:39
записать байт файл мандарин Общие вопросы Delphi 8 09.05.2007 20:45