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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.12.2008, 15:25   #1
Bayazet
Форумчанин
 
Регистрация: 08.12.2008
Сообщений: 156
По умолчанию работа с текстовыми файлами

у меня есть файл типа TEXT (он может быть достаточно быльшим ~10-12 мб), и переменная str типа WIDESTRING

мне необходимо в прогрессбар передавать состояние прочитывания файла.
для этого я использую функцию SIZEOF(file1), что и является максимумом прогрессбара, и для каждой Readln (file1, str) я тоже определяю SIZEOF(str) и плюсую к позиции прогрессбара

но видимо размеры определяются по разному и прогрессбар заполняется криво. (я НЕ забываю обнулять позицию в начале )

зотелось бы узнать, есть ли в дельфях функция, которая возвращает количество строк в текстовом файле?
или что можете посоветовать еще?

заранее благодарю
Bayazet вне форума Ответить с цитированием
Старый 08.12.2008, 15:38   #2
_Engine_
Форумчанин
 
Регистрация: 29.06.2008
Сообщений: 603
По умолчанию

Код:
procedure TForm1.FormCreate(Sender: TObject);
var
  WS : Widestring;
begin
  WS := '123456789';
  ShowMessage('SizeOf = ' + IntToStr(SizeOf(WS)) + '   Length = ' + IntToStr(Length(WS)));
end;
Запусти и удивись
_Engine_ вне форума Ответить с цитированием
Старый 08.12.2008, 15:51   #3
Bayazet
Форумчанин
 
Регистрация: 08.12.2008
Сообщений: 156
По умолчанию

ну, в общем-то, да, не совпадают
а файл с таким же содержанием вообще, на несколько порядков больше
но это проблемы не отменяет
Bayazet вне форума Ответить с цитированием
Старый 08.12.2008, 16:07   #4
_Engine_
Форумчанин
 
Регистрация: 29.06.2008
Сообщений: 603
По умолчанию

В моем предыдущем посте был ответ на твой вопрос. Но ты так и не удосужился задуматься над тем, что я тебе привел.
_Engine_ вне форума Ответить с цитированием
Старый 08.12.2008, 16:21   #5
Bayazet
Форумчанин
 
Регистрация: 08.12.2008
Сообщений: 156
По умолчанию

ну, давай поразмышляем вслух

sizeof(ws) возвращает 4, length(ws) - 9
если я создаю тхт файл в котором всего одна строка "123456789", sizeof(f) мне дает 460. когда я оттуда считываю строку ws, мне возвращаются все теже 4 и 9

а рекомендации в каком направлении мне стоит двигаться я не заметил..
я долго смотрел
Bayazet вне форума Ответить с цитированием
Старый 08.12.2008, 16:27   #6
_Engine_
Форумчанин
 
Регистрация: 29.06.2008
Сообщений: 603
По умолчанию

Можно еще и справку посмотреть по этим функциям
_Engine_ вне форума Ответить с цитированием
Старый 08.12.2008, 16:35   #7
Bayazet
Форумчанин
 
Регистрация: 08.12.2008
Сообщений: 156
По умолчанию

sizeof возвращает количество байт из памяти на эту переменную
но все равно, остается вопрос открытым:
sizeof(file) не равен сумме sizeof каждой строки этого файла!
Bayazet вне форума Ответить с цитированием
Старый 08.12.2008, 17:06   #8
_Engine_
Форумчанин
 
Регистрация: 29.06.2008
Сообщений: 603
По умолчанию

строка - это указатель. SizeOf дает размер указателя, который равен 4
_Engine_ вне форума Ответить с цитированием
Старый 08.12.2008, 17:17   #9
Bayazet
Форумчанин
 
Регистрация: 08.12.2008
Сообщений: 156
По умолчанию

а что надо сделать, чтобы выковырнуть по указателю само поле в памяти??
Bayazet вне форума Ответить с цитированием
Старый 08.12.2008, 18:02   #10
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Для текстовых файлов можно использовать TStrings, а конкретней TStringList;

Код:
var  F: TStringList; // F - текстовый файл
        KolStrok: integer;
begin
  F:= TStringList.Create;
  F.LoadFromFile('FileText.txt');
  KolStrok:= F.Count;  // Свой-во Count  указывает кол-во строк в файле
  F.Free;
end;
Доступ к строкам - F.Strings[i]:= 'бла-бла-бла';
Свойства : F.Add(string);
F.SaveToFile('fileName.txt');
F.Clear;
F.Insert(i,'вставляемый текст')
F.Delete(i);
Для не текстовых файлов хорошо применять F: FileStream;
SizeOfFile:= F.Seek(0,soFromEnd); // курсор в конец файла и возвращает
// общее кол-во байт в файле
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с текстовыми файлами (Delphi) Omedus Помощь студентам 6 18.12.2012 00:31
Pascal работа с текстовыми файлами Andrey89 Помощь студентам 3 25.12.2007 19:21
Работа с Текстовыми файлами wwww Общие вопросы Delphi 5 29.10.2007 11:17
Работа с текстовыми файлами DartMrakkk Общие вопросы Delphi 3 14.07.2007 16:52
Задача с текстовыми файлами SpeedMaster Паскаль, Turbo Pascal, PascalABC.NET 4 02.04.2007 15:43