Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 2317 • Страница 108 из 116<  1 ... 105  106  107  108  109  110  111 ... 116  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 11.01.2009
Нужно написать функцию, которая возвращает количество строчек в указанном текстовом файле. Я поискал, и встроенной такой функции не нашел, может плохо искал.... Написал такой код:


Цитата:
program Project2;

{$APPTYPE CONSOLE}
uses
SysUtils;


function textsize(var txtfile:text):longint;
begin
reset (txtfile);
while not EOF(txtfile) do
begin
readln(txtfile);
inc(textsize)
end
end;

begin
{ TODO -oUser -cConsole Main : Insert code here }
end.



Но компилятор ее не компилирует, он указывает на строчку inc(textsize) и пишет:

Цитата:
[Error] Project2.dpr(14): Not enough actual parameters



Недостаточно актуальных параметров? К чему это, что у меня написано неправильно? Прошу вашей помощи....



Партнер
 

Junior
Статус: Не в сети
Регистрация: 04.02.2009
Откуда: Санкт-Петербург
странно как-то = )
делфи лень запускать, но если руководствоваться вашей логикой то что-то типа:

Код:
program Project2;

uses
SysUtils;

function textsize(txtfile:textfile):longint;
begin
 reset (txtfile);
 result:=0; //конечно вроде автоматом обнуляется.. но все же
 while not EOF(txtfile) do begin
  readln(txtfile);
//  inc(textsize); вообще, иногда помогает inc(textsize,1); но основная беда в том, что мне почему-то казалось, что это в паскаль для возврата значения нужно было обращаться на имя функции..
// надо что-то типа:
  inc(result,1); //ну либо inc(result);
 end;
end;

begin
{ TODO -oUser -cConsole Main : Insert code here }
end.


 

Member
Статус: Не в сети
Регистрация: 11.01.2009
GaRFik Спасибо за помощь, исправил там на result и все заработала, кстати

result:=0 --- если это в начале не поставить, то результат будет всегда больше на 1 от верного, получается, что изначально у result значение 1....


 

Junior
Статус: Не в сети
Регистрация: 04.02.2009
Откуда: Санкт-Петербург
а если там строк 0 и поставить изначально result:=1, то тогда будет на 1 строку больше = )


 

Member
Статус: Не в сети
Регистрация: 11.01.2009
Чтобы копировать файлы, везде почти во всех хелпах, говориться надо использовать функцию

CopyFile(const FileName, DestName: TFileName)


Но пишит, что Undeclared identifier: 'sysutilds', хотя проставлено uses sysutils.....


Странно, что такой функции в делфи 7 нету.... интересно, как такое может быть


 

Member
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
там еще longbool переменная должна быть в параметрах функции.

Добавлено спустя 5 минут 57 секунд:
а в sysutils, видимо, опечатка.

_________________
Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)


 

Member
Статус: Не в сети
Регистрация: 11.01.2009
Да, опечатка, в общем, делфи пишит, что просто такой функции как copyfile он не знает, хотя пишут на форумах, то что это встроенная функция....


 

Junior
Статус: Не в сети
Регистрация: 04.02.2009
Откуда: Санкт-Петербург
ну так покажи свой uses = )


 

Акула пера
Статус: Не в сети
Регистрация: 13.10.2005
Откуда: Москва
tolikrog писал(а):
Нужно написать функцию, которая возвращает количество строчек в указанном текстовом файле. Я поискал, и встроенной такой функции не нашел, может плохо искал....

А я бы сделал так:
Код:
function txtLineCount(fileName: string): cardinal;
var sl: TStringList;
begin
  sl:= TStringList.Create;
  sl.LoadFromFile(fileName);
  result:= sl.Count;
end;


 

Member
Статус: Не в сети
Регистрация: 02.03.2005
Откуда: Владивосток
K-A-A
+1

_________________
I7 2600K@4.2/Asrock P67/Kingston HyperX 8Gb 1866/OCZ 256Gb/GIGABYTE GTX 960/BenQ EW2430/LG 47LM620T/Yamaha RX-V471+NS-555+NS-C444+NS-333+YST-SW215


 

Member
Статус: Не в сети
Регистрация: 15.08.2004
Откуда: Красноярск
tolikrog, функция CopyFile определена в модуле windows (uses windows, etc).
А по подсчету строк в тексте.. Если текст небольшой, то вариант K-A-A пойдёт. А если реально здоровый, то для оптимизации возможны варианты. Хотя в BDS2006 (реально Turbo Delphi Explorer) пара мильёнов строк за секунду грузятся.


 

Junior
Статус: Не в сети
Регистрация: 14.05.2008
ckotick писал(а):
Если текст небольшой, то вариант K-A-A пойдёт. А если реально здоровый, то для оптимизации возможны варианты.


Если есть сомнения, то можно в функции K-A-A вместо cardinal тип int 64 поставить. Но я не думаю, что есть документы содержащие 2 квинтиллиона строк. :tooth:


 

Member
Статус: Не в сети
Регистрация: 15.08.2004
Откуда: Красноярск
un8086, не. Вопрос в быстродействии. По-моему, еще Delphi 7 не очень быстро работала с TStringList. Плюс чтение всего файла в объект - это выделение памяти. 80МиБ текста = 120МиБ оперативной.


 

Member
Статус: Не в сети
Регистрация: 01.12.2002
Фото: 0
K-A-A, список строк создаем, а освобождать память забываем. sl.Free;


 

Junior
Статус: Не в сети
Регистрация: 04.02.2009
Откуда: Санкт-Петербург
Crash писал(а):
K-A-A, список строк создаем, а освобождать память забываем. sl.Free;


чую я что делфи это сам сделает после того как функция закончит свое выполнение.


 

Member
Статус: Не в сети
Регистрация: 02.03.2005
Откуда: Владивосток
GaRFik
GaRFik писал(а):
чую я что делфи это сам сделает после того как функция закончит свое выполнение.


По идее должен - но всегда лучше освобождать память самому ...

_________________
I7 2600K@4.2/Asrock P67/Kingston HyperX 8Gb 1866/OCZ 256Gb/GIGABYTE GTX 960/BenQ EW2430/LG 47LM620T/Yamaha RX-V471+NS-555+NS-C444+NS-333+YST-SW215


 

Junior
Статус: Не в сети
Регистрация: 04.02.2009
Откуда: Санкт-Петербург
Ну только если как правила хорошего тона. Это Вам не СИ, так что можно особо не парится, но если не приучить себя к этому то да.. на других языках можно получить уеву тучу ликов :)


 

Member
Статус: Не в сети
Регистрация: 27.05.2007
мдя... а зачем для подсчёта количества строк загружать весь текстовый файл?... не кажется немного излишне?
не легче пробежаться по файлу и подсчитать с помощью readln(f,buf); в цикле while not eof(f);
ну в смысле как и у поставившего вопрос


Последний раз редактировалось ДуччЧ 27.08.2009 18:29, всего редактировалось 3 раз(а).

 

Member
Статус: Не в сети
Регистрация: 15.08.2004
Откуда: Красноярск
ДуччЧ, это не по-индусски уже. ;)
Кстати, на большом тексте (реально большом - в сотни мег) множественные readln дадут весьма медленный подсчет.


 

Member
Статус: Не в сети
Регистрация: 27.05.2007
ну есть и другие способы... почему собственно привязка к файлу как к текстовому?


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 2317 • Страница 108 из 116<  1 ... 105  106  107  108  109  110  111 ... 116  >
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  

Лаборатория














Новости

Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan