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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.05.2008, 19:58   #1
1234
Заблокирован
 
Регистрация: 09.11.2007
Сообщений: 97
Вопрос Расчет числа строк в типизированном файле

Здравствуйте. Подскажите, пожалуйста, как расчитать число строк в файле с помощью команды filesize
Например, есть файл типа integer со следующим содержимым:

1
1
1
1

Как сделать чтобы комманда size:= filesize(f);
Вернула значение 4?
Если я ввожу в столбик больше одной цифры, выдаются какие-то странные и неверные значения..
1234 вне форума Ответить с цитированием
Старый 19.05.2008, 22:16   #2
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
Сообщение

Вот пример работы с типизированным файлом:
Код:
Function Cou(Pat :String):Integer;
Var F :File of Integer;
begin
 Cou := 0;
  Assign(F, Pat);
  Reset(F);
 Cou := FileSize(F);
  Close(F);
end;

Procedure WritInt(Pat :String);
Var F :File of Integer; N, N0 :Integer;
begin
 randomize;
  Assign(F, Pat);
  ReWrite(F);
 N0 := Random(50)+10;
  WriteLn('Zapisanno v file, ', N0, ' zapisey.');
 For N:=1 To N0 Do
 Write(F, N0);
  Close(F);
end;

Var
    S :string;
    d :integer;
begin
  Write('Viberite deystvie!_(1-Create File; 2-Kollichestvo zapisey: ) ');
  Readln(d);
 if (d=1)or(d=2) then
 begin
  Write('Vvedite imya fayla_( NAPRIMER: tex.dat ) ');
  Readln(s);
 end;
  CASE d OF
 1: WritInt(S);
 2: WriteLn('Kollichestvo zapisey v file "', S, '"=', Cou(S));
  END;
 readln;
end.
Если в текстовом файле, то можно напрмер вначале записывать колличество элементов в файле, и исходя из этого считывать(если так раззрешенно у вас).
--------------------------------------------------------------------------
Для текстового только так:

Код:
Function Cou(Pat :String):Integer;
Var F :Text; I, Cnt :Integer;
begin
 Cou := 0;
 Cnt := 0;
  Assign(F, Pat);
  Reset(F);
 While NOT EOF(F) DO
 begin
  ReadLn(F, I);
  Cnt := Cnt + 1;
 end;
  Cou := Cnt;
  Close(F);
end;

Procedure WritInt(Pat :String);
Var F :Text; N, N0 :Integer;
begin
 randomize;
  Assign(F, Pat);
  ReWrite(F);
 N0 := Random(50)+10;
  WriteLn('Zapisanno v file, ', N0, ' zapisey.');
 For N:=1 To N0 Do
 WriteLn(F, N);
  Close(F);
end;

Var
    S :string;
    d :integer;
begin
  Write('Viberite deystvie!_(1-Create File; 2-Kollichestvo zapisey: ) ');
  Readln(d);
 if (d=1)or(d=2) then
 begin
  Write('Vvedite imya fayla_( NAPRIMER: tex.dat ) ');
  Readln(s);
 end;
  CASE d OF
 1: WritInt(S);
 2: WriteLn('Kollichestvo zapisey v file "', S, '"=', Cou(S));
  END;
 readln;
end.

Последний раз редактировалось Alter; 19.05.2008 в 22:56.
Alter вне форума Ответить с цитированием
Старый 19.05.2008, 23:11   #3
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Цитата:
Если я ввожу в столбик больше одной цифры, выдаются какие-то странные и неверные значения..
По этому поводу замечу, что файл будет состоять не только из единиц, а ещё и из #13 и #10. Так с типизированными файлами нельзя. Да и впрочем и единицы вводить нельзя т.к. integer например 2 байта (хотя и не всегда). Лучше програмно это делать, вот как Alter
eoln вне форума Ответить с цитированием
Старый 19.05.2008, 23:34   #4
1234
Заблокирован
 
Регистрация: 09.11.2007
Сообщений: 97
По умолчанию

Спасибо за ответы!! Мне как раз такой вариант подходит.
Сейчас подумаю и попробую доделать

Последний раз редактировалось 1234; 19.05.2008 в 23:38.
1234 вне форума Ответить с цитированием
Старый 19.05.2008, 23:43   #5
1234
Заблокирован
 
Регистрация: 09.11.2007
Сообщений: 97
По умолчанию

Снова, когда указываю путь к своему файлу, неверно считается
Какими символами его надо заполнять, чтобы выдавалось верное значение?
1234 вне форума Ответить с цитированием
Старый 20.05.2008, 10:13   #6
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Цитата:
Какими символами его надо заполнять, чтобы выдавалось верное значение?
Типизированный файл типа integer надо заполнять не с помощью блокнота, а с помощью HexEditora'ов. Выставляем там вид - word, и заполняем, учитывая разницу word и integer. Все преобразования производим в инжинерном калькуляторе.
Короче эт долго и неприятно. Чем не подходит програмное заполнение файла?
eoln вне форума Ответить с цитированием
Старый 20.05.2008, 11:14   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Снова, когда указываю путь к своему файлу, неверно считается
Какими символами его надо заполнять, чтобы выдавалось верное значение?
так вы же сами ответили на свой вопрос! ещё когда тему создавали - Расчет числа строк в типизированном файле. Файл не ТЕКСТОВЫЙ (подозреваю, что Вы в файл просто цифры вбили и решили, что он стал "file of Integer" :-)
создавать его нужно ТОЛЬКО программно... например, так:
Код:
var
  f : file of Integer;
  K : Integer;
begin
  Assign(f,"ПУТЬ И ИМЯ ВАШЕГО ФАЙЛА');
  Rewrite(f); {перезаписываем файл}
  WriteLn('Введите число (0 для окончания ввода:');
  repeat
    Readln(K);
    if K<>0 do Write(f,K);
  until K=0; 
  Close(f);
end;
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Расчет полей с датами и передачи строк в отчет. crem78 БД в Delphi 2 09.08.2008 12:07
Колиество строк в файле Аlex Помощь студентам 9 17.05.2008 21:57
являются ли числа в файле упорядоченными Pohmel Помощь студентам 6 21.04.2008 16:12
расчет числа фибоначчи tro Паскаль, Turbo Pascal, PascalABC.NET 6 05.12.2007 11:52
Поиск одинаковых строк в файле ATL Помощь студентам 13 02.05.2007 01:05