Форум » [x]Harbour » Беда с функцией AfterATNUM() .... » Ответить

Беда с функцией AfterATNUM() ....

Andrey: Делал обработку текстового файла (в конце строки всегда стоит CHR(13)+CHR(10) ) Не могу получить первую строку функцией AfterATNUM() .... Результирующий файл различается от входящего ! Может как нибудь по другому можно ? Вот примерный текст программы: [more] 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 STRFILE(cTarget,"User52.txt",.F.) WAIT RETURN NIL [/more]

Ответов - 52, стр: 1 2 3 All

Andrey: Dima пишет: Возможно где то косяк в твоей функции (я особо не вникал) Хотя довольно странно Косяк в выборке строки: TokenInit(@cSource, cTok,, @cTokenEnv) DO while ! TokenEnd(@cTokenEnv) cLex := TokenNext(cSource,, @cTokenEnv) ? "Stroka:",nI++ ?? ":",cLex enddo Отдельно даже сделал. Не работает TokenNext !

Dima: Содержимое user5.txt 12345 00000 11111 w:\fond9" 22222 absder проверка В 4 строке Фсё сломается , хотя после нее (и до нее) все верно....... Разделители у тебя указаны явно , ХЗ в чем дело. Перевод строки везде есть ЗЫ Результат

Andrey: Если заменить cTok := "{}" заместо Chr(13) + Chr(10) тоже самое происходит ! Видать все таки дело в TokenNext(cSource,, @cTokenEnv) ! Хотя если убрать " - то все нормально проходит !!! Все дело в кавычках " !!! Надо писать разработчикам TokenNext ! Кто сможет ?


Dima: Andrey пишет: Надо писать разработчикам TokenNext ! Кто сможет ? Могу ошибаться , но кажется Павел уже занимается этим.

Andrey: Переделал программу на твою функцию. С простой строчкой нормально, с CVS-строкой содержащие кавычки (") - опять косяки !!! Вот пример в архиве ---------- Андрей не надо выкладывать мое мыло ладно ? Ссылку потер Утилита dub.exe - сравнение 2х-файлов. Где бы такую Виндовую взять ?

Dima: Andrey Уверен что в твоем файлике каждая кавычка имеет пару (я не чекал) ? Просто вспомнил что если открывать CSV файлик в котором есть не парные кавычки в EXCEL то после такой кавычки (все что после нее) типа съедается EXCEL (пока не начнешь редактировать) Впрочем о чем это я ? Excel тут не при чем , это так просто вспомнилось... И потом , Андрей скажи ну зачем тебе в этом файле нужны кавычки ? Сейчас 20100601,114,"SERVER-XP","Андрей", Так уже не достаточно будет ? 20100601,114,SERVER-XP,Андрей, В качестве разделителя если не ошибаюсь (в CSV) принято ставить ; PS А не парные кавычки у тебя есть по ходу , только что заметил.

Pasha: Проблема заключается не в token в разных вариациях, а в HB_Crypt. В результате ее работы в зашифрованную строку случайным образом попадают коды #13#10, которые затем и портят всю малину

Dima: Pasha Можешь на примере показать (если это реально) ?

Dima: Andrey пишет: Утилита dub.exe - сравнение 2х-файлов. Где бы такую Виндовую взять ? Поиск поюзай ;) На вскидку (проверил) такая функция есть в Total Commander PS Юзани (нужна рега) _http://forum.ru-board.com/forum.cgi?action=filter&forum=35&filterby=topictitle&word=compare

Pasha: А что там показывать, двоичные коды, что ли ? результатом hb_crypt('20100601,114,"SERVER-XP","Андрей","","w:\fond9\abonent4.exe","4.66f",20100521,"Системный а.",101,T,F,F,318288412,10,"Net","Vxod",2,"Вход успешен !",1', cPassword) будет строка, содержащая Chr(13)+Chr(10) и никакой другой разделитель использовать нельзя, так как результат работы любого симметричного криптоалгоритма (хотя hb_crypt до криптоалгоритма не дотягивает) может содержать этот разделитель, что в дальнейшем исказит дешифровку. Андрею можно посоветовать сбрасывать лог не в текстовый файл, а в дбф с мемо-полем. Такой алгоритм будет работать

Dima: Pasha То есть функцией hb_crypt пользоваться не следует , так как результат может быть не предсказуем... Так ?

Pasha: Нет конечно. Результатом этой функции является зашифрованная строка, содержажая коды от 0 до 255 в любой последовательности. При этом нельзя использовать никакой разделитель строк, так как этот разделитель, состоящий из одного или более символов, может оказаться в зашифрованной строке. Ей можно пользоваться, когда длина строки содержится вне строки. К примеру, если использовать такой формат: 2-4 байта - длина строки, строка, следующая строка с префиксом - ее длиной, и т.д. Или файл с мемо-полем, что тоже самое.

Andrey: Pasha пишет: Или файл с мемо-полем, что тоже самое. Не хочу заморачиваться с dbf ! Pasha пишет: К примеру, если использовать такой формат: 2-4 байта - длина строки, строка, следующая строка с префиксом - ее длиной, и т.д. Вот это интересней, только не пойму как считывать строку ? Как будет выглядеть файл (2-3 строчки) ?

Pasha: Примерно так. Пусть aStr - массив строк Запись массива строк в строку: cStr := "" AEval(aStr, {|c| cStr += I2Bin(len(c)) + c}) Чтение из строки в массив строк: nPos := 1 while nPos <= len(cStr) nLen := Bin2I(Substr(cStr, nPos, 2)) nPos += 2 AADD(aStr, Substr(cStr, nPos, nLen)) nPos += nLen enddo внутрь цикла можно вставить шифровку/дешифровку

Andrey: Нет, ни как не въеду ! Дай пожалуйста образец файла, как он будет выглядеть ? Черкани 3 строчки файла....

Pasha: ДлинаСтр1 (2 байта) Стр1 ДлинаСтр2 (2 байта) Стр2 ...

Andrey: Pasha пишет: ДлинаСтр1 (2 байта) Стр1 ДлинаСтр2 (2 байта) Стр2 ... А как искать вхождения строк ? по маске "(xx)" или еще как ?

Pasha: Вхождения каких строк куда надо искать ? В этой теме поиск вхождения строк мы еще не обсуждали

Andrey: Pasha пишет: Чтение из строки в массив строк: nPos := 1 while nPos <= len(cStr) nLen := Bin2I(Substr(cStr, nPos, 2)) nPos += 2 AADD(aStr, Substr(cStr, nPos, nLen)) nPos += nLen enddo Я вот про это .....

Pasha: Андрей, ты говоришь загадками... Что-то с этим кодом непонятно ? И при чем здесь вхождение строк ?



полная версия страницы