On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение



Пост N: 2
Зарегистрирован: 25.01.18
ссылка на сообщение  Отправлено: 22.03.18 09:42. Заголовок: Чтение файла построчно


После трехлетнего перерыва вернулся к Харбор/МиниГУИ
Понадобилось обрабатывать построчно большие текстовые файлы - несколько сот Кб
Почитал форум - вроде удобного средства построчного доступа так и не появилось (?)
Тогда я сочинил класс StringFileReader по синтаксису из TTimerClass.prg.
Если чего не понял - извиняйте.

Работаю с ним так
 
oReader:=StringFileReader():New()

// перебрать строки файла 1
if oReader:OpenFile(cFile)

DO WHILE oReader:NextString()
st:=alltrim(oReader:cString)
....
обработка строки
....
END DO
oReader:CloseFile()
wMain.EditBox_1.Value:=wMain.EditBox_1.Value+"Обработан Файл данных ["+cFile+"]"+CRLF
else
wMain.EditBox_1.Value:=wMain.EditBox_1.Value+"Файл данных ["+cFile+"] не прочитан !"+CRLF
endif

Т.е. после того как oReader:NextString() вернет .T. - забираю готовую строку из oReader:cString


--- сам код класса --------------------------------
Скрытый текст



Была задумка и коды ошибок обрабатывать - но утилита заработала как надо и стало лень.

-----------------
сюда пишу т.к. не могу оценить важность темы. Может - шлак. Тогда пусть грохнет админ.
Если тема полезная - предлагаю знатокам доработать класс.



Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 10 [только новые]


администратор




Пост N: 6782
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 22.03.18 09:53. Заголовок: SadStar2018 пишет: ..


SadStar2018 пишет:

 цитата:
Понадобилось обрабатывать построчно большие текстовые файлы - несколько сот Кб


Разве это не подходит ?
santy пишет:

 цитата:
Можна использовать функции работы с текстовыми файлами:

HB_FEof() Tests if the end-of-file is reached in the currently selected text file.
HB_FGoBottom() Moves the file pointer to the last line in a text file.
HB_FGoto() Moves the record pointer to a specific line in the currently selected text file.
HB_FGoTop() Moves the record pointer to the begin-of-file.
HB_FInfo() Retrieves status information about the currently selected text file.
HB_FLastRec() Returns the number of lines in the currently selected text file.
HB_FReadAndSkip() Reads the current line and moves the record pointer.
HB_FreadLN() Reads the current line and without moving the record pointer.
HB_FRecno() Returns the current line number of the currently selected text file.
HB_FSelect() Queries or changes the currently selected text file area.
HB_FSkip() Moves the record pointer in the currently selected text file.
HB_FUse() Opens or closes a text file in a text file area.



Спасибо: 1 
ПрофильЦитата Ответить



Пост N: 4
Зарегистрирован: 25.01.18
ссылка на сообщение  Отправлено: 23.03.18 01:01. Заголовок: В моем дистрибутиве ..


В моем дистрибутиве MiniGUI-2017-12 таких функций нет.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1390
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 23.03.18 09:30. Заголовок: Эти функции в харбор..


Эти функции в харборе. См. contrib\hbmisc\hb_f.c

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1218
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 23.03.18 12:04. Заголовок: SadStar2018 пишет: ..


SadStar2018 пишет:

 цитата:
В моем дистрибутиве MiniGUI-2017-12 таких функций нет.



Помимо этих функций в харбуре есть класс TFileRead(), который тоже читает построчно
 
METHOD New( cFile, nSize ) // Create a new class instance
METHOD Open( nMode ) // Open the file for reading
METHOD Close() // Close the file when done
METHOD ReadLine() // Read a line from the file
METHOD Name() // Retunrs the file name
METHOD IsOpen() // Returns .T. if file is open
METHOD MoreToRead() // Returns .T. if more to be read
METHOD Error() // Returns .T. if error occurred
METHOD ErrorNo() // Returns current error code
METHOD ErrorMsg( cText ) // Returns formatted error message

PROTECTED:

METHOD EOL_pos()




Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 6
Зарегистрирован: 25.01.18
ссылка на сообщение  Отправлено: 26.03.18 04:58. Заголовок: Скачал hb3 - https:..


Скачал hb3 -
https://sourceforge.net/projects/harbour-project/files/binaries-windows/nightly/harbour-nightly-win.7z/download
Делаю поиск по всем файлам.
hb_freadln упоминается только в ChangeLog.txt
TFileRead не упоминается совсем.

Скачал sources https://sourceforge.net/projects/harbour-project/files/source/3.0.0/harbour-3.0.0-src.zip/download
Делаю поиск по всем файлам.
TFileRead упоминается только в ht_class.txt
HB_FREADLN упоминается только в hb_f.c

И что дальше? Расчитывал найти lib или prg.

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3708
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 26.03.18 08:12. Заголовок: В поставке minigui б..


В поставке minigui библиотеки hbmisc действительно нет.
А в hb3 она есть: см. lib\win\mingw\libhbmisc.a
Она содержит и функции hb_f*, и класс TFileRead
Сырцы находятся в папке contrib\hbmisc

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1391
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 26.03.18 09:46. Заголовок: SadStar2018 пишет: ..


SadStar2018 пишет:

 цитата:
И что дальше? Расчитывал найти lib или prg.


Сырцы: https://github.com/harbour/core/archive/master.zip
Чтобы получить lib, нужно собрать с помощью bcc. Как собрать, описано в Readme.md

Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 1266
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 26.03.18 09:48. Заголовок: Pasha пишет: В пост..


Pasha пишет:

 цитата:
В поставке minigui библиотеки hbmisc действительно нет.


Ощибочка вышла
Эта contrib библиотека всегда была в дистрибутиве minigui

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 792
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 26.03.18 09:51. Заголовок: Чтение текстовых фай..


Чтение текстовых файлов построчно

 цитата:

cFileText := TFileRead():New( cFileName )
cFileText:Open()
WHILE cFileText:MoreToRead()
cLine:= cFileText:ReadLine()



в хХарбоур 1.0 применял и так же использую в Minigui

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3709
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 26.03.18 09:54. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Ощибочка вышла
Эта contrib библиотека всегда была в дистрибутиве minigui



Да, есть. Проглядел

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 1
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет