Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Помогите студенту с файлами


Автор: sergey24 25.4.2004, 00:00
Добрый день.
Помогите пожалуста студенту.
Нужно сделать следующее
Считать с файла с определеного места число ( максимум 10 разрядов)
сделать с ним орифметические операции
вывести в таблицу и сохранить результат в файле.

вот исходник чтения числа из файла
я там ни как ни могу настроить типы файла в командах seek reаd

2, как с переменной buf выполнить арифметические операции??

за ранее очень благодарень :-)

var f: file ; // файл

buf: String; // буфер для чтения из файла

number: integer;
kol:integer;
name:string [10];

begin
number:=StrToInt(Edit1.Text);
kol:=StrToInt(Edit2.Text);
name:='bfgh';


number:=0;
AssignFile(f, 'base.txt');
Reset(f); // открыть для чтения

Seek(f, kol);

read(f, buf);


tabl.Cells[1,3]:=buf;

CloseFile(f); // закрыть файл

Автор: cot 25.4.2004, 06:10
Наверное вместо read - BlockRead. А с buf StrToInt или я вопроса не понял.

Автор: sergey24 25.4.2004, 10:15
пробовал
с типами данных настроить не могу

Автор: dm9 25.4.2004, 10:39
Так работать не будет - где размер, сколько читать? Все два гига стринга? smile.gif

Попробуй так:

Код
var
   Buffer : array [1..10] of Char;
   S : String;
   H : Integer;

AssignFile(f, 'base.txt');
ReSet (f, 1); {1 - размер ячейки. Ты по Seek (f, n) перемещаешься к ячейке номер n, и если ячейка не единичная, то попадаешь куда не надо. Насколько я помню. По умолчанию размер ячейки - 128}
Seek (f, kol); {Первый байт - нулевой, а не единица!}
FillChar (Buffer, 10, 0); {Заполняем буффер нулями}
BlockRead (f, Buffer, Number);
S := String (Buffer); //Строка
{Если не работает вставь сюда такое, хотя... не помню, в общем... Попробуй Delete (S, Length (S), 1);}
Tabl.Cells [1,3] := S;
Val (S, H, C); //Уже число - оно в H
if C <> 0
then ShowMessage ('Там не было числа!');
CloseFile (f);


Если не работает - скажи. Просто проверять сейчас не хочу. Писал без проверки на работоспособность. Может, что не учёл smile.gif

Number здесь - сколько байт (сколько символов читать).
Добавлено @ 10:43
Проверил всё-таки.
Delete (S, Length (S), 1); не нужно...

Автор: sergey24 25.4.2004, 23:52
Привет

код рабочий за исключением этого:
Val (S, H, C); //Уже число - оно в H
if C <> 0
then ShowMessage ('Там не было числа!');

но он в принцепе и не надо тк все данные числа

проблемка в другом
в переменой S : String;
заноситься только одно разрядное число вместо остальных разрядов мусор.
И второе как с полученой переменой S : String;
сделать арифметические операции?

и занести обратно в файл наверное также.

Большое спасибо за примерчик :-)

Автор: dm9 26.4.2004, 16:08
Цитата
код рабочий за исключением этого:
Val (S, H, C); //Уже число - оно в H
if C <> 0
then ShowMessage ('Там не было числа!');


Не понял, что тут нерабочего smile.gif

Цитата
как с полученой переменой S : String;
сделать арифметические операции?


Так Val - это преобразование к числу. Я для этого и использовал его.


Цитата
в переменой S : String;
заноситься только одно разрядное число вместо остальных разрядов мусор.

Попробуй вместо
Buffer : array [1..10] of Char;
поставить
Buffer : packed array [1..10] of Char;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)