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




Пост N: 1318
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.06.10 01:49. Заголовок: Беда с функцией AfterATNUM() ....


Делал обработку текстового файла (в конце строки всегда стоит CHR(13)+CHR(10) )

Не могу получить первую строку функцией AfterATNUM() .... Результирующий файл различается от входящего !
Может как нибудь по другому можно ?

Вот примерный текст программы: Скрытый текст


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 52 , стр: 1 2 3 All [только новые]


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




Пост N: 1693
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 01.06.10 07:20. Заголовок: Можно так сделать и ..


Можно так сделать и не придумывать велосипед
FUNCTION MAIN()
LOCAL nI, nLen, cSource, cTarget := "", cTemp

/*
cSource := FILESTR("User5.txt")
nLen := NUMAT( CHR(13)+CHR(10), cSource )
? " Kol-vo CHR(13)+CHR(10) = ",nLen
FOR nI := 1 TO nLen
? nI
cTemp := AfterATNUM( CHR(13)+CHR(10), cSource, nI )
? cTemp,"-",LEN(cTemp)
// ---- обработка строки ------
// cTemp := MyCRYPT(cTemp)
cTarget := cTarget + cTemp + CHR(13)+CHR(10)
NEXT

*/
if hb_fuse("user5.txt")#-1
do while !hb_feof()
Ctarget+=hb_freadln()+CHR(13)+CHR(10)
// вот тут можно сразу писать в USER52.TXT , предварительно его открыв в
// другом Hb_fselect()

hb_fskip()
enddo
Hb_fuse()
STRFILE(cTarget,"User52.txt",.F.)
endif
RETURN NIL


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




Пост N: 1694
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 01.06.10 07:24. Заголовок: PS Для Xharbour - L..


PS

Для Xharbour - LibMisc.lib
Для Harbour - Hbmisc.lib

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


Пост N: 172
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 01.06.10 08:00. Заголовок: В Xharbour чтение ..


В Xharbour чтение и разбор текстовых файлов делаю так:

cFileNameTxt:="User5.txt"

IF FILE(cFileNameTxt)
cFileText := TFileRead():New( cFileNameTxt )
cFileText:Open()

WHILE cFileText:MoreToRead()
cLine:= cFileText:ReadLine()
// ваша обработка строки

END WHILE //ENDDO
cFileText:Close()
ENDIF




















<a href=http://www.es.7searchsoft.com/ >programas gratis</a>

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




Пост N: 1695
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 01.06.10 08:12. Заголовок: Andrey пишет: Не мо..


Andrey пишет:

 цитата:
Не могу получить первую строку функцией AfterATNUM()


И нужно было использовать BeforATNUM и тогда 1 строка не потеряется и учитывать 4 параметр
в этой функции

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




Пост N: 1319
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.06.10 10:38. Заголовок: Спасибо БОЛЬШОЕ Vlad..


Спасибо БОЛЬШОЕ Vlad04 и Dima !!!

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




Пост N: 1320
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.06.10 11:19. Заголовок: Dima пишет: И нужно..


Dima пишет:

 цитата:
И нужно было использовать BeforATNUM и тогда 1 строка не потеряется и учитывать 4 параметр
в этой функции



Что-то не получается и с ней !!!
Я могу конечно обойтись и как вы предложили и как у меня уже есть сделанные функции, но хотелось бы разобраться с этими НЕПОНЯТНЫМИ функциями. Уж больно исходник маленьким получается, без доп.библиотек !

Вот исправленный текст Скрытый текст


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




Пост N: 1464
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 01.06.10 11:32. Заголовок: Намного эффективнее ..


Намного эффективнее будет использование функций TokenInit - TokenNext - TokenEnd:

Local cTokenEnv := ''
Local cTok := Chr(13) + Chr(10)

TokenInit(@c, cTok,, @cTokenEnv)
while ! TokenEnd(@cTokenEnv)
cLex := TokenNext(c,, @cTokenEnv))
enddo

В случае AtNum - BeforeAtNum строка каждый раз в цикле просматривается с самого начала, что крайне неоптимально, а TokenNext "ползет" по строке, выбирая следующую лексему


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




Пост N: 1321
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.06.10 11:46. Заголовок: Pasha пишет: TokenI..


Pasha пишет:

 цитата:
TokenInit(@c, cTok,, @cTokenEnv)



Да действительно, это оптимальней и лучше для больших файлов !!!
Спасибо БОЛЬШОЕ Паша !!!

Вот рабочая программа Скрытый текст


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





Пост N: 11
Зарегистрирован: 16.12.08
ссылка на сообщение  Отправлено: 01.06.10 12:02. Заголовок: Пример из хелпа xHa..


Пример из хелпа xHarbour функции TokenInit()


// This example does the same, but takes advantage of local tokenizer
// environments. The performance is about 20% better compared to the
// global tokenizer environment, since SaveToken() and RestToken() are
// not needed.

#define CRLF Chr(13)+Chr(10)

PROCEDURE Main
LOCAL cText := MemoRead( "Textfile.txt" )
LOCAL cToken, cTokenEnv
LOCAL aLines := {}
LOCAL nLines := 0
LOCAL nWords := 0

// initialize local tokenizer environment
TokenInit( @cText, CRLF, 2, @cTokenEnv )

DO WHILE .NOT. TokenEnd( @cTokenEnv )
cToken := TokenNext( @cText, , @cTokenEnv )

IF cToken == ""
// one blank space is an empty line for AChoice()
cToken := " "
ENDIF

nLines ++
nWords += WordCount( @cToken )

AAdd( aLines, cToken )
ENDDO

// display the text file
AChoice( ,,,, aLines )

CLS
? "Line count:", nLines
? "Word count:", nWords
RETURN


FUNCTION WordCount( cText )
LOCAL cTokenEnv
LOCAL nWords := 0

TokenInit( @cText, " ,.!?", @cTokenEnv )

DO WHILE .NOT. TokenEnd( @cTokenEnv )
TokenNext( @cText, , @cTokenEnv )
nWords ++
ENDDO

RETURN nWords





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




Пост N: 1697
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 01.06.10 12:16. Заголовок: Andrey У тебя вроде..


Andrey
У тебя вроде ж должен быть xHarbour Language Reference Guide , посеял что ли ? :)

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




Пост N: 1323
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.06.10 13:19. Заголовок: Dima пишет: У тебя ..


Dima пишет:

 цитата:
У тебя вроде ж должен быть xHarbour Language Reference Guide


Да есть он у меня, просто ночью делал и начал как в клипере с NUMAT() и на нем зациклился.
А с TOKEN() у меня всегда непонятка была. Не люблю я его.
Спасибо Паша направил на путь истинный... А уж после него и сам в Хелпе обнаружил...

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




Пост N: 1324
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.06.10 13:28. Заголовок: Теперь другая фигня ..


Теперь другая фигня !
Хочу в лог-файл добавлять данные, но чтоб пользователь не мог видеть и править их.

Беру файл, построчно шифрую и записываю в другой.
Потом проверяю: считываю шифрованный файл, построчно разбираю, дешифрую строку и записываю в другой файл.
Не работает ! Остаются куски шифрованные !

Вот текст программы: Скрытый текст


Кто поможет ?
Может не надо использовать Chr(13) + Chr(10), а делать свои метки ?

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




Пост N: 1698
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 01.06.10 13:47. Заголовок: Проверил на простом ..


Проверил на простом USER5.TXT
Cодержимое
111
222
333
444

После отработки программы содержимое файла User5DeCrypt.txt == User5.txt

PS
В User5crypt.txt все chr(13)+chr(10) на своих местах

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




Пост N: 1325
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.06.10 14:35. Заголовок: Dima пишет: Провери..


Dima пишет:

 цитата:
Проверил на простом USER5.TXT


Это мало. Сделай из DBF-файла (записей 6) CVS-файл, с разделителем "," ! Можно через DBU.EXE


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




Пост N: 1699
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 01.06.10 14:44. Заголовок: Сделал , все в норме..


Сделал , все в норме.
Дай свой текст USER5.TXT

PS
Глянь свой User5.txt в 16-ричном виде (можно через Far) , может у тебя
где то chr(13) потерялся в конце какой то строки

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




Пост N: 1326
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.06.10 15:39. Заголовок: Dima пишет: Дай сво..


Dima пишет:

 цитата:
Дай свой текст USER5.TXT



Даю. Заодно и программу на хХарборе 1.0.0
http://files.mail.ru/IMUKCV


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




Пост N: 1700
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 01.06.10 16:02. Заголовок: Andrey LOL Забей в..


Andrey
LOL

Забей в файлике User5.txt всего одну строчечку и сделай после нее перевод строки , прогу запусти
и глянь результат в User5DeCrypt.txt

Строка такая
w:\fond9\abonent4.exe","

или вот так ;)
w:\fond9","


или так
w:\fond9"

ЗЫ
Harbour 2.0.0 так же сработал (я о результате в User5DeCrypt.txt)

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




Пост N: 1327
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.06.10 16:22. Заголовок: Блин, фигня получает..


Блин, фигня получается....
Файл считывается правильно, а дальше не работает:
TokenInit(@cSource, cTok,, @cTokenEnv)
DO while ! TokenEnd(@cTokenEnv)
cLex := TokenNext(cSource,, @cTokenEnv)
? "Stroka:",nI++
?? ":",cLex
// ------------- обработка строки ----------------
cLex2 := HB_DeCrypt( cLex, cPassWord )
// ? cLex2, LEN(cLex2)
cTarget := cTarget + cLex2 + cTok
enddo


Т.е. TokenNext(cSource,, @cTokenEnv) выдает неправильную строку !!!

А что делать то ? Как исправить данную ситуацию ?

Может не надо использовать Chr(13) + Chr(10), а делать свои метки ?



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




Пост N: 1701
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 01.06.10 16:36. Заголовок: Crypt , Decrypt по т..


Crypt , Decrypt по таким строкам работает верно (проверил)
Возможно где то косяк в твоей функции (я особо не вникал)
Хотя довольно странно
Так не работает w:\fond9"
А так работает :\fond9"
В обоих случаях в конце строки есть перевод строки.

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




Пост N: 1703
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 01.06.10 16:56. Заголовок: Andrey пишет: А с T..


Andrey пишет:

 цитата:
А с TOKEN() у меня всегда непонятка была. Не люблю я его.


Пробни то что то Vlad04 предложил или я.

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

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