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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.04.2008, 01:23   #1
Никки
Форумчанин Подтвердите свой е-майл
 
Аватар для Никки
 
Регистрация: 20.11.2007
Сообщений: 500
По умолчанию Использование BlockRead

Пишу:

Код:
var
        f:file;
        Buf: array[1..2048] of Char;
begin
        AssignFile(f,'А.dat');
        Reset(f,1);
        BlockRead(f,buf,8);
          //  здесь у меня в переменной buf текст
        BlockRead(f,buf,2);
          //  здесь у меня в переменной buf число
end;
мне необходимо плучить этот текст и число в обычных форматах Integer и String?? А как низнаю....
Никки вне форума Ответить с цитированием
Старый 20.04.2008, 01:35   #2
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Что-нибудь вроде:
Код:
type
	rec = packed record
		text 	: array [0..7] of char;
		num		: word;
	end;
..................
var
	r : rec;
....................
	BlockRead(f,r, 1);
B_N вне форума Ответить с цитированием
Старый 20.04.2008, 01:45   #3
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Можно и просто дополнить:
Код:
var   
        f:file;   
        Buf: array[1..2048] of Char;   
begin   
        AssignFile(f,'C:\A.dat');   
        Reset(f,1);   
        BlockRead(f,buf,8);   
          //  здесь у меня в переменной buf текст, покажем его
          Label1.Caption:=Copy(buf,1,8);
        BlockRead(f,buf,2);
          //  здесь у меня в переменной buf число, покажем и его
          Label2.Caption:=IntToStr(StrToInt(Copy(buf,1,2)));
end;
mihali4 вне форума Ответить с цитированием
Старый 20.04.2008, 05:17   #4
Никки
Форумчанин Подтвердите свой е-майл
 
Аватар для Никки
 
Регистрация: 20.11.2007
Сообщений: 500
По умолчанию

B_N, что ты написал, я вообще не понял...
mihali4, так у меня ничего не выходит!! В обоих случаях строка получается пустой!
Никки вне форума Ответить с цитированием
Старый 20.04.2008, 13:55   #5
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
B_N, что ты написал, я вообще не понял...
У нас принято на "вы"...
А понимание придет, попозже...
Цитата:
mihali4, так у меня ничего не выходит!! В обоих случаях строка получается пустой!
Значит в файле записано не то... Проверено лично - работает.
Предлагаю поставить брэкпойнт на строку 10, посмотреть, что в буфере
и убедиться, что там первые 8 членов - не строка из 8-ми символов...
mihali4 вне форума Ответить с цитированием
Старый 20.04.2008, 14:00   #6
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от Никки Посмотреть сообщение
B_N, что ты написал, я вообще не понял...
Для тех, кто не понял, повторяю .....
Код:
unit Unit1;

interface

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


const
    fname = 'c:\12345678.123';

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    WriteButton: TButton;
    ReadButton: TButton;
    procedure WriteButtonClick(Sender: TObject);
    procedure ReadButtonClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;


    rec = packed record
        s : string[32];
        i : integer;
        d : double;
    end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.WriteButtonClick(Sender: TObject);
var
    f : file;
    r : rec;
begin
    r.s := Edit1.Text;
    r.i := StrToIntDef(Edit2.Text, -1);
    r.d := StrToFloatDef(Edit3.Text, NaN);
    AssignFile(f, fname);
    Rewrite(f, sizeof(rec));
    BlockWrite(f, r, 1);
    CloseFile(f);

    Edit1.Text := '';
    Edit2.Text := '';
    Edit3.Text := '';
end;

procedure TForm1.ReadButtonClick(Sender: TObject);
var
    f : file;
    r : rec;
begin
    AssignFile(f, fname);
    ReSet(f, sizeof(rec));
    BlockRead(f, r, 1);
    CloseFile(f);

    Edit1.Text := r.s;
    Edit2.Text := IntToStr(r.i);
    Edit3.Text := FloatToStr(r.d);

end;

end.
B_N вне форума Ответить с цитированием
Старый 20.04.2008, 19:17   #7
Никки
Форумчанин Подтвердите свой е-майл
 
Аватар для Никки
 
Регистрация: 20.11.2007
Сообщений: 500
По умолчанию

Когда читается строка в buf вот что попадает:
Код:
(#0, #16, #0, #1, #0, #0, #0, #0, 'Ё', 'q', #20, #0, '°', 'q', #20, #0, #0, ......)
всю строку копировать не стал... не знаю что это означает!
Никки вне форума Ответить с цитированием
Старый 20.04.2008, 19:41   #8
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от Никки Посмотреть сообщение
Когда читается строка в buf вот что попадает:
Код:
(#0, #16, #0, #1, #0, #0, #0, #0, 'Ё', 'q', #20, #0, '°', 'q', #20, #0, #0, ......)
всю строку копировать не стал... не знаю что это означает!
Это означает пустую строку, поскольку она начинается с нуля.
Прикрепите к следующему своему сообщению файл А.dat, который вы читаете, посмотрим, что там за заголовок. По содержимому буфера видно, что файл не является текстовым.
mihali4 вне форума Ответить с цитированием
Старый 21.04.2008, 00:13   #9
Никки
Форумчанин Подтвердите свой е-майл
 
Аватар для Никки
 
Регистрация: 20.11.2007
Сообщений: 500
По умолчанию

Вот! Прикрепил файл!
Вложения
Тип файла: rar A.rar (131 байт, 26 просмотров)
Никки вне форума Ответить с цитированием
Старый 21.04.2008, 00:29   #10
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от Никки Посмотреть сообщение
Вот! Прикрепил файл!
Ну и где же там текст и число?
Вот вам нормальный файл с текстом и числом, проверяйте программу...
Вложение 3358

Последний раз редактировалось mihali4; 08.11.2008 в 14:04.
mihali4 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Использование *.swf Романнн Мультимедиа в Delphi 14 02.04.2010 09:27
использование таймера KancJler Помощь студентам 13 19.04.2008 01:13
использование using namespace std; che Общие вопросы C/C++ 7 11.10.2007 17:13
Использование длл Anatolij Win Api 1 02.01.2007 19:54