Автор | Сообщение |
|
| постоянный участник
|
Пост N: 1318
Зарегистрирован: 12.09.06
|
|
Отправлено: 01.06.10 01:49. Заголовок: Беда с функцией AfterATNUM() ....
Делал обработку текстового файла (в конце строки всегда стоит CHR(13)+CHR(10) ) Не могу получить первую строку функцией AfterATNUM() .... Результирующий файл различается от входящего ! Может как нибудь по другому можно ? Вот примерный текст программы: Скрытый текст 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
|
|
|
|
Ответов - 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
|
|
|
|
| |
Пост N: 1694
Зарегистрирован: 17.05.05
|
|
Отправлено: 01.06.10 07:24. Заголовок: PS Для Xharbour - L..
PS Для Xharbour - LibMisc.lib Для Harbour - Hbmisc.lib
|
|
|
|
| постоянный участник
|
Пост 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>
|
|
|
|
| |
Пост N: 1695
Зарегистрирован: 17.05.05
|
|
Отправлено: 01.06.10 08:12. Заголовок: Andrey пишет: Не мо..
Andrey пишет: цитата: | Не могу получить первую строку функцией AfterATNUM() |
| И нужно было использовать BeforATNUM и тогда 1 строка не потеряется и учитывать 4 параметр в этой функции
|
|
|
|
| постоянный участник
|
Пост N: 1319
Зарегистрирован: 12.09.06
|
|
Отправлено: 01.06.10 10:38. Заголовок: Спасибо БОЛЬШОЕ Vlad..
Спасибо БОЛЬШОЕ Vlad04 и Dima !!!
|
|
|
|
| постоянный участник
|
Пост N: 1320
Зарегистрирован: 12.09.06
|
|
Отправлено: 01.06.10 11:19. Заголовок: Dima пишет: И нужно..
Dima пишет: цитата: | И нужно было использовать BeforATNUM и тогда 1 строка не потеряется и учитывать 4 параметр в этой функции |
| Что-то не получается и с ней !!! Я могу конечно обойтись и как вы предложили и как у меня уже есть сделанные функции, но хотелось бы разобраться с этими НЕПОНЯТНЫМИ функциями. Уж больно исходник маленьким получается, без доп.библиотек ! Вот исправленный текст Скрытый текст FUNCTION MAIN() LOCAL nI, nLen, cSource, cTarget := "", cTemp, nSkipChars cSource := FILESTR("User5.txt") ? "Len User5.txt =",LEN(cSource) nLen := NUMAT( CHR(13)+CHR(10), cSource ) ? " Kol-vo CHR(13)+CHR(10) = ",nLen FOR nI := 1 TO nLen ? nI //nSkipChars := ATNUM( CHR(13)+CHR(10), cSource, nI-1 ) //? nSkipChars cTemp := BeforATNUM( CHR(13)+CHR(10), cSource, nI ) ? cTemp,"-",LEN(cTemp) // ------------- обработка строки ---------------- // cTemp := MyCrypt(cTemp) cTarget := cTarget + cTemp + CHR(13)+CHR(10) ? LEN(cTarget) NEXT ? ? "Len User52.txt =",LEN(cTarget) STRFILE(cTarget,"User52.txt",.F.) WAIT RETURN NIL
|
|
|
|
|
| Администратор
|
Пост 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 "ползет" по строке, выбирая следующую лексему
|
|
|
|
| постоянный участник
|
Пост N: 1321
Зарегистрирован: 12.09.06
|
|
Отправлено: 01.06.10 11:46. Заголовок: Pasha пишет: TokenI..
Pasha пишет: цитата: | TokenInit(@c, cTok,, @cTokenEnv) |
| Да действительно, это оптимальней и лучше для больших файлов !!! Спасибо БОЛЬШОЕ Паша !!! Вот рабочая программа Скрытый текст FUNCTION MAIN() LOCAL nI := 1, cSource, cTarget := "" Local cTokenEnv := '', cLex Local cTok := Chr(13) + Chr(10) cSource := FILESTR("User5.txt") ? "Len User5.txt =",LEN(cSource) TokenInit(@cSource, cTok,, @cTokenEnv) DO while ! TokenEnd(@cTokenEnv) cLex := TokenNext(cSource,, @cTokenEnv) ? nI++ ? cLex, LEN(cLex) // ------------- обработка строки ---------------- // cTemp := MyCrypt(cTemp) cTarget := cTarget + cLex + CHR(13)+CHR(10) enddo ? ? "Len User52.txt =",LEN(cTarget) STRFILE(cTarget,"User52.txt",.F.) WAIT RETURN NIL
|
|
|
|
|
| |
Пост 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
|
|
|
|
| |
Пост N: 1697
Зарегистрирован: 17.05.05
|
|
Отправлено: 01.06.10 12:16. Заголовок: Andrey У тебя вроде..
Andrey У тебя вроде ж должен быть xHarbour Language Reference Guide , посеял что ли ? :)
|
|
|
|
| постоянный участник
|
Пост N: 1323
Зарегистрирован: 12.09.06
|
|
Отправлено: 01.06.10 13:19. Заголовок: Dima пишет: У тебя ..
Dima пишет: цитата: | У тебя вроде ж должен быть xHarbour Language Reference Guide |
| Да есть он у меня, просто ночью делал и начал как в клипере с NUMAT() и на нем зациклился. А с TOKEN() у меня всегда непонятка была. Не люблю я его. Спасибо Паша направил на путь истинный... А уж после него и сам в Хелпе обнаружил...
|
|
|
|
|
| постоянный участник
|
Пост N: 1324
Зарегистрирован: 12.09.06
|
|
Отправлено: 01.06.10 13:28. Заголовок: Теперь другая фигня ..
Теперь другая фигня ! Хочу в лог-файл добавлять данные, но чтоб пользователь не мог видеть и править их. Беру файл, построчно шифрую и записываю в другой. Потом проверяю: считываю шифрованный файл, построчно разбираю, дешифрую строку и записываю в другой файл. Не работает ! Остаются куски шифрованные ! Вот текст программы: Скрытый текст FUNCTION MAIN() Local nI := 1, cSource, cTarget := "" Local cTokenEnv := '', cLex, cLex2 Local cTok := Chr(13) + Chr(10) Local cFileIsx := "User5.txt", cFileCrypt := "User5crypt.txt" Local cFileDeCrypt := "User5DeCrypt.txt", cPassWord := "testfile" CLEAR SCREEN ? ? cSource := FILESTR(cFileIsx) ? "Len "+cFileIsx+" =",LEN(cSource)," bytes" TokenInit(@cSource, cTok,, @cTokenEnv) DO while ! TokenEnd(@cTokenEnv) cLex := TokenNext(cSource,, @cTokenEnv) ? "Stroka:",nI++ //? cLex, LEN(cLex) // ------------- обработка строки ---------------- cLex := HB_Crypt( cLex, cPassWord ) cTarget := cTarget + cLex + cTok enddo ? ? "Len "+cFileCrypt+" =",LEN(cTarget)," bytes" STRFILE(cTarget,cFileCrypt,.F.) ? ? ? "DeCrypt file: "+cFileCrypt cSource := FILESTR(cFileCrypt) ? "Len "+cFileCrypt+" =",LEN(cSource)," bytes" cTarget := "" nI := 1 cTokenEnv := '' TokenInit(@cSource, cTok,, @cTokenEnv) DO while ! TokenEnd(@cTokenEnv) cLex := TokenNext(cSource,, @cTokenEnv) ? "Stroka:",nI++ // ------------- обработка строки ---------------- cLex2 := HB_DeCrypt( cLex, cPassWord ) // ? cLex2, LEN(cLex2) cTarget := cTarget + cLex2 + cTok enddo ? ? "Len "+cFileDeCrypt+" =",LEN(cTarget)," bytes" STRFILE(cTarget,cFileDeCrypt,.F.) ? WAIT RETURN NIL
| Кто поможет ? Может не надо использовать Chr(13) + Chr(10), а делать свои метки ?
|
|
|
|
| |
Пост 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) на своих местах
|
|
|
|
| постоянный участник
|
Пост N: 1325
Зарегистрирован: 12.09.06
|
|
Отправлено: 01.06.10 14:35. Заголовок: Dima пишет: Провери..
Dima пишет: цитата: | Проверил на простом USER5.TXT |
| Это мало. Сделай из DBF-файла (записей 6) CVS-файл, с разделителем "," ! Можно через DBU.EXE
|
|
|
|
| |
Пост N: 1699
Зарегистрирован: 17.05.05
|
|
Отправлено: 01.06.10 14:44. Заголовок: Сделал , все в норме..
Сделал , все в норме. Дай свой текст USER5.TXT PS Глянь свой User5.txt в 16-ричном виде (можно через Far) , может у тебя где то chr(13) потерялся в конце какой то строки
|
|
|
|
| постоянный участник
|
Пост N: 1326
Зарегистрирован: 12.09.06
|
|
Отправлено: 01.06.10 15:39. Заголовок: Dima пишет: Дай сво..
|
|
|
|
| |
Пост 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)
|
|
|
|
| постоянный участник
|
Пост 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), а делать свои метки ?
|
|
|
|
| |
Пост N: 1701
Зарегистрирован: 17.05.05
|
|
Отправлено: 01.06.10 16:36. Заголовок: Crypt , Decrypt по т..
Crypt , Decrypt по таким строкам работает верно (проверил) Возможно где то косяк в твоей функции (я особо не вникал) Хотя довольно странно Так не работает w:\fond9" А так работает :\fond9" В обоих случаях в конце строки есть перевод строки.
|
|
|
|
| |
Пост N: 1703
Зарегистрирован: 17.05.05
|
|
Отправлено: 01.06.10 16:56. Заголовок: Andrey пишет: А с T..
Andrey пишет: цитата: | А с TOKEN() у меня всегда непонятка была. Не люблю я его. |
| Пробни то что то Vlad04 предложил или я.
|
|
|
|
| постоянный участник
|
Пост N: 1328
Зарегистрирован: 12.09.06
|
|
Отправлено: 01.06.10 17:01. Заголовок: Dima пишет: Возможн..
Dima пишет: цитата: | Возможно где то косяк в твоей функции (я особо не вникал) Хотя довольно странно |
| Косяк в выборке строки: TokenInit(@cSource, cTok,, @cTokenEnv) DO while ! TokenEnd(@cTokenEnv) cLex := TokenNext(cSource,, @cTokenEnv) ? "Stroka:",nI++ ?? ":",cLex enddo Отдельно даже сделал. Не работает TokenNext !
|
|
|
|
|
| |
Пост N: 1704
Зарегистрирован: 17.05.05
|
|
Отправлено: 01.06.10 17:07. Заголовок: Содержимое user5.txt..
Содержимое user5.txt 12345 00000 11111 w:\fond9" 22222 absder проверка В 4 строке Фсё сломается , хотя после нее (и до нее) все верно....... Разделители у тебя указаны явно , ХЗ в чем дело. Перевод строки везде есть ЗЫ Результат
|
|
|
|
| постоянный участник
|
Пост N: 1329
Зарегистрирован: 12.09.06
|
|
Отправлено: 01.06.10 18:35. Заголовок: Если заменить cTok :..
Если заменить cTok := "{}" заместо Chr(13) + Chr(10) тоже самое происходит ! Видать все таки дело в TokenNext(cSource,, @cTokenEnv) ! Хотя если убрать " - то все нормально проходит !!! Все дело в кавычках " !!! Надо писать разработчикам TokenNext ! Кто сможет ?
|
|
|
|
| |
Пост N: 1705
Зарегистрирован: 17.05.05
|
|
Отправлено: 01.06.10 19:04. Заголовок: Andrey пишет: Надо ..
Andrey пишет: цитата: | Надо писать разработчикам TokenNext ! Кто сможет ? |
| Могу ошибаться , но кажется Павел уже занимается этим.
|
|
|
|
| постоянный участник
|
Пост N: 1330
Зарегистрирован: 12.09.06
|
|
Отправлено: 01.06.10 19:27. Заголовок: Переделал программу ..
Переделал программу на твою функцию. С простой строчкой нормально, с CVS-строкой содержащие кавычки (") - опять косяки !!! Вот пример в архиве ---------- Андрей не надо выкладывать мое мыло ладно ? Ссылку потер Утилита dub.exe - сравнение 2х-файлов. Где бы такую Виндовую взять ?
|
|
|
|
| |
Пост N: 1706
Зарегистрирован: 17.05.05
|
|
Отправлено: 01.06.10 19:47. Заголовок: Andrey Уверен что в..
Andrey Уверен что в твоем файлике каждая кавычка имеет пару (я не чекал) ? Просто вспомнил что если открывать CSV файлик в котором есть не парные кавычки в EXCEL то после такой кавычки (все что после нее) типа съедается EXCEL (пока не начнешь редактировать) Впрочем о чем это я ? Excel тут не при чем , это так просто вспомнилось... И потом , Андрей скажи ну зачем тебе в этом файле нужны кавычки ? Сейчас 20100601,114,"SERVER-XP","Андрей", Так уже не достаточно будет ? 20100601,114,SERVER-XP,Андрей, В качестве разделителя если не ошибаюсь (в CSV) принято ставить ; PS А не парные кавычки у тебя есть по ходу , только что заметил.
|
|
|
|
| Администратор
|
Пост N: 1465
Зарегистрирован: 23.05.05
|
|
Отправлено: 01.06.10 20:30. Заголовок: Проблема заключается..
Проблема заключается не в token в разных вариациях, а в HB_Crypt. В результате ее работы в зашифрованную строку случайным образом попадают коды #13#10, которые затем и портят всю малину
|
|
|
|
| |
Пост N: 1707
Зарегистрирован: 17.05.05
|
|
Отправлено: 01.06.10 20:36. Заголовок: Pasha Можешь на при..
Pasha Можешь на примере показать (если это реально) ?
|
|
|
|
| |
Пост N: 1708
Зарегистрирован: 17.05.05
|
|
Отправлено: 01.06.10 20:52. Заголовок: Andrey пишет: Утил..
Andrey пишет: цитата: | Утилита dub.exe - сравнение 2х-файлов. Где бы такую Виндовую взять ? |
| Поиск поюзай ;) На вскидку (проверил) такая функция есть в Total Commander PS Юзани (нужна рега) _http://forum.ru-board.com/forum.cgi?action=filter&forum=35&filterby=topictitle&word=compare
|
|
|
|
| Администратор
|
Пост N: 1466
Зарегистрирован: 23.05.05
|
|
Отправлено: 01.06.10 20:56. Заголовок: А что там показывать..
А что там показывать, двоичные коды, что ли ? результатом 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 до криптоалгоритма не дотягивает) может содержать этот разделитель, что в дальнейшем исказит дешифровку. Андрею можно посоветовать сбрасывать лог не в текстовый файл, а в дбф с мемо-полем. Такой алгоритм будет работать
|
|
|
|
| |
Пост N: 1709
Зарегистрирован: 17.05.05
|
|
Отправлено: 01.06.10 21:30. Заголовок: Pasha То есть функц..
Pasha То есть функцией hb_crypt пользоваться не следует , так как результат может быть не предсказуем... Так ?
|
|
|
|
|
| Администратор
|
Пост N: 1467
Зарегистрирован: 23.05.05
|
|
Отправлено: 01.06.10 21:50. Заголовок: Нет конечно. Результ..
Нет конечно. Результатом этой функции является зашифрованная строка, содержажая коды от 0 до 255 в любой последовательности. При этом нельзя использовать никакой разделитель строк, так как этот разделитель, состоящий из одного или более символов, может оказаться в зашифрованной строке. Ей можно пользоваться, когда длина строки содержится вне строки. К примеру, если использовать такой формат: 2-4 байта - длина строки, строка, следующая строка с префиксом - ее длиной, и т.д. Или файл с мемо-полем, что тоже самое.
|
|
|
|
| постоянный участник
|
Пост N: 1331
Зарегистрирован: 12.09.06
|
|
Отправлено: 01.06.10 22:15. Заголовок: Pasha пишет: Или фа..
Pasha пишет: цитата: | Или файл с мемо-полем, что тоже самое. |
| Не хочу заморачиваться с dbf ! Pasha пишет: цитата: | К примеру, если использовать такой формат: 2-4 байта - длина строки, строка, следующая строка с префиксом - ее длиной, и т.д. |
| Вот это интересней, только не пойму как считывать строку ? Как будет выглядеть файл (2-3 строчки) ?
|
|
|
|
| Администратор
|
Пост N: 1468
Зарегистрирован: 23.05.05
|
|
Отправлено: 01.06.10 22:42. Заголовок: Примерно так. Пусть ..
Примерно так. Пусть 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 внутрь цикла можно вставить шифровку/дешифровку
|
|
|
|
| постоянный участник
|
Пост N: 1332
Зарегистрирован: 12.09.06
|
|
Отправлено: 01.06.10 23:03. Заголовок: Нет, ни как не въеду..
Нет, ни как не въеду ! Дай пожалуйста образец файла, как он будет выглядеть ? Черкани 3 строчки файла....
|
|
|
|
| Администратор
|
Пост N: 1469
Зарегистрирован: 23.05.05
|
|
Отправлено: 02.06.10 08:08. Заголовок: ДлинаСтр1 (2 байта) ..
ДлинаСтр1 (2 байта) Стр1 ДлинаСтр2 (2 байта) Стр2 ...
|
|
|
|
| постоянный участник
|
Пост N: 1333
Зарегистрирован: 12.09.06
|
|
Отправлено: 02.06.10 18:40. Заголовок: Pasha пишет: ДлинаС..
Pasha пишет: цитата: | ДлинаСтр1 (2 байта) Стр1 ДлинаСтр2 (2 байта) Стр2 ... |
| А как искать вхождения строк ? по маске "(xx)" или еще как ?
|
|
|
|
| Администратор
|
Пост N: 1470
Зарегистрирован: 23.05.05
|
|
Отправлено: 02.06.10 20:12. Заголовок: Вхождения каких стро..
Вхождения каких строк куда надо искать ? В этой теме поиск вхождения строк мы еще не обсуждали
|
|
|
|
| постоянный участник
|
Пост N: 1334
Зарегистрирован: 12.09.06
|
|
Отправлено: 02.06.10 20:51. Заголовок: Pasha пишет: Чтение..
Pasha пишет: цитата: | Чтение из строки в массив строк: nPos := 1 while nPos <= len(cStr) nLen := Bin2I(Substr(cStr, nPos, 2)) nPos += 2 AADD(aStr, Substr(cStr, nPos, nLen)) nPos += nLen enddo |
| Я вот про это .....
|
|
|
|
| Администратор
|
Пост N: 1471
Зарегистрирован: 23.05.05
|
|
Отправлено: 02.06.10 21:02. Заголовок: Андрей, ты говоришь ..
Андрей, ты говоришь загадками... Что-то с этим кодом непонятно ? И при чем здесь вхождение строк ?
|
|
|
|
| постоянный участник
|
Пост N: 1335
Зарегистрирован: 12.09.06
|
|
Отправлено: 02.06.10 23:45. Заголовок: Ладно, буду делать р..
Ладно, буду делать рабочий тест. А там поглядим....
|
|
|
|
|
| постоянный участник
|
Пост N: 173
Зарегистрирован: 13.10.05
|
|
Отправлено: 03.06.10 20:54. Заголовок: Еще вариант. Зашифро..
Еще вариант. Зашифрованный текст ( в данном случае разборка на строки не нужна) кодируем типа как почтовые программы. Или в цифры, как ниже: ( код на Паскале) function Koder(s: string): string; var i: integer; t: string; begin for i:=1 to Length(s) do begin t:=t+inttostr((ord(s[ i ])*2-100)*3)+' '; end; Result:=t; end; //****************************************************************** function Dekoder(s: string): string; var i,a: integer; t,z: string; begin z:=' '; a:=0; for i:=1 to Length(s) do begin if s[ i ]<>' ' then z:=z+s[ i ] else begin a:=strtoint(z); a:=round((a/3+100)/2); t:=t+chr(a); z:=' '; a:=0; end; end; Result:=t; end; Я в Делфях так делаю
|
|
|
|
| постоянный участник
|
Пост N: 189
Зарегистрирован: 06.02.07
|
|
Отправлено: 04.06.10 08:42. Заголовок: Vlad04 пишет: t:=t+..
Vlad04 пишет: цитата: | t:=t+inttostr((ord(s)*2-100)*3)+' '; |
| Влад, у тебя там, видимо, "ord(s[ i ])*2..." должно быть (судя по тому, что начиная со скобки после "s" в посте все идет курсивом). Обычная тут (в постах форума) ошибка (и у меня бывали) при наличии в коде работы с элементами массивов, где параметр цикла "i" (форумный движок воспринимает такое сочетание как тэг начала курсива)... Надо просто внутри "[ ]" ставить в начале и конце пробелы, тогда в посте все нормально выглядит (да и "предпросмотр" - вещь полезная :) особенно когда сюда копипастить кусок кода). Извиняюсь за "мелочные придирки" :) - просто иногда тяжело в большом куске кода бывает разобраться, просто скопипастив его из поста ("и чё оно не работает??.."), где потерялось "[ i ]".
|
|
|
|
| |
Пост N: 1712
Зарегистрирован: 17.05.05
|
|
Отправлено: 04.06.10 10:12. Заголовок: gustow Поправил ...
gustow Поправил .
|
|
|
|
| |
Пост N: 1713
Зарегистрирован: 17.05.05
|
|
Отправлено: 04.06.10 10:23. Заголовок: Andrey Не пробовал ..
Andrey Не пробовал вместо HB_CRYPT , HB_UUEncode (HB_UUDecode) ?
|
|
|
|
| постоянный участник
|
Пост N: 1337
Зарегистрирован: 12.09.06
|
|
Отправлено: 04.06.10 13:22. Заголовок: Dima пишет: Не проб..
Dima пишет: цитата: | Не пробовал вместо HB_CRYPT , HB_UUEncode (HB_UUDecode) ? |
| Нет, не пробовал. Посмотрю конечно. Спасибо. Я понял, что Паша мне дал (ну заклинился на другом), сейчас это делаю ! Дошло наконец-то....
|
|
|
|
| постоянный участник
|
Пост N: 1339
Зарегистрирован: 12.09.06
|
|
Отправлено: 04.06.10 16:55. Заголовок: ВОТ засада, то какая..
ВОТ засада, то какая ! Если удалить хоть один байт с ТАКОГО файла (что Паша предложил), то раскодировать этот файл больше нельзя !!! И нафига такие заморочки с кодированием ? Есть ли другие способы ? Может заместо CHR(13)+CHR(10) взять разделитель типа [МояМетка] ? Вероятность того, что при шифрации строк может получиться такая комбинация - равна 0 !!!
|
|
|
|
| |
Пост N: 1719
Зарегистрирован: 17.05.05
|
|
Отправлено: 04.06.10 16:59. Заголовок: Andrey пишет: Есть ..
Andrey пишет: я же предлагал (на твоем примере не проверял). Dima пишет: цитата: | Не пробовал вместо HB_CRYPT , HB_UUEncode (HB_UUDecode) ? |
|
|
|
|
|
| Администратор
|
Пост N: 1474
Зарегистрирован: 23.05.05
|
|
Отправлено: 04.06.10 18:48. Заголовок: Andrey пишет: ВОТ з..
Andrey пишет: цитата: | ВОТ засада, то какая ! Если удалить хоть один байт с ТАКОГО файла (что Паша предложил), то раскодировать этот файл больше нельзя !!! И нафига такие заморочки с кодированием ? Есть ли другие способы ? Может заместо CHR(13)+CHR(10) взять разделитель типа [МояМетка] ? Вероятность того, что при шифрации строк может получиться такая комбинация - равна 0 !!! |
| Чем больше символов содержит разделитель, тем меньше вероятность того, что он случайно будет содержаться в результате криптофункции. Так что это тоже вариант, хоть и не железный. А вариант с длиной строки - железобетонный Ж) А насчет удаления одного байта: надо тогда сформулировать, в чем заключается задача. Пользователь не должен видеть логи, но может захотеть их "испортить" ? Испортить файл с длиной строки и шифрованной строкой действительно можно удалением одного байта. Если шкодник захочет испортить файл с разделителем - он может стереть его содержимое. Помешать ему нельзя. Можно лишь фиксировать сам факт вмешательства - например, всегда дописывать в конец файла значение хэш, или, на худой конец, crc32
|
|
|
|
| |
Пост N: 1721
Зарегистрирован: 17.05.05
|
|
Отправлено: 04.06.10 19:58. Заголовок: Pasha пишет: А насч..
Pasha пишет: цитата: | А насчет удаления одного байта: надо тогда сформулировать, в чем заключается задача |
| +1
|
|
|
|
| постоянный участник
|
Пост N: 1342
Зарегистрирован: 12.09.06
|
|
Отправлено: 04.06.10 20:23. Заголовок: Задача: Хочу в лог-ф..
Задача: Хочу в лог-файл добавлять данные, но чтоб пользователь не мог видеть и править их. Вариант удаления файла не рассматриваю, не важен пока. Если кто-то попортит файл, то хотелось бы вытащить оставшиеся данные. Т.е. шифрация всего файл-лога тоже не прокатывает, т.к. урезание нескольких байтов приведет к невозможности расшифровки всего остального файла. Вот и вся задача.
|
|
|
|
| |
Пост N: 1722
Зарегистрирован: 17.05.05
|
|
Отправлено: 04.06.10 20:37. Заголовок: Andrey Ну прячь его..
Andrey Ну прячь его где то подальше. Имя файлу придумай такое что бы ни ХТО не догадался ;) Как вариант можно лог в Zip архив запихать с паролем , правда тут придется подумать как лучше это сделать. Испортить зловред может ведь не только лог файл но и базу... PS Однако вумные юзеры у тебя.
|
|
|
Ответов - 52
, стр:
1
2
3
All
[только новые]
|
|