Обсуждение:Длм-ка doctor.d32 - функции для работы с файлами и т.д
3 (2)
Обсуждение:Длм-ка doctor.d32 - функции для работы с файлами и т.д ( Обсуждение примера 22.11.2003 06:52 )
4(3)Пути к файлам определяются относительно компьютера, на котором идет выполнение модуля. Для двухзвенной архитектуры – относительно Вашего компьютера, для трехзвенной – относительно сервера приложений.
Реализованы несколько функций, которые позволяют:
- копировать, удалять, переименовывать (перемещать), искать, запускать файлы
- читать каталоги
- получить имя компьютера.
- искать, читать, корежить содержимое файла
- делать преобразование 16-й строки вида "0F1A" в целое число и обратно
- и пр.
03.04.2019 – поправлена функция dcCopyFile, ранее имя нового файла переводилась в верхний регистр, теперь остается неизменным.
27.11.2018 – функции dcAsciiToBase64 и dcBase64ToAscii получили необязательные аргументы IsHex и ToHex, которые позволяют работать с 0-м символом. В сочетании с dcGetText и dcPutText они теперь могут работать с бинарными файлами.
23.06.2016 – Добавлены функции dcAsciiToUTF8 и dcUTF8ToAscii.
05.05.2015 – По просьбе kampiler добавлена функция dcCRC32.
16.10.2014 – Поправлена функция dcAsciiToBase64 для корректной работы
Посмотреть пример
>> ОтветитьДЛМ-ка обновлена (-) ( григ 06.06.2006 08:38 )
5(1)Not specified
>> Ответитьк сожалению, проблема ( sdo 06.06.2006 10:47 )
5(1)которую я Вам описал в письме, осталась :((((
вот у меня есть файл со строкой
[code]
1234567 - считаем позиции..
; REM MacroConn = rsmail4
[code]
я ищу:
Row = 0; Col = 0; dcFindText("clntw32.ini","MacroConn",0,Row,Col);
Col = 5
в случае, если строка имеет вид:
; MMM MacroConn = rsmail4
Col = 3
не считает смещение от начала строки, если встречаются символы, равные первому в образце поиска.
>> ОтветитьПисьма не видел, иначе бы давно исправил. Еще раз обновил. (-) ( григ 06.06.2006 11:41 )
5(1)Not specified
>> Ответитьвчера отправил на greg@ezmail.ru ( sdo 06.06.2006 11:50 )
5(1)обратно мне не вернулось, значит куда-то пришло.
а я думал, вы обновили doctor как раз исправив найденную неточность.
проверил - нифига..
сейчас проверил - работает.
Спасибо!
>> Ответить
Длм-ка обновлена (+) ( григ 08.06.2006 16:47 )
5(1)Добавлены функции dcTArraySort, dcTArrayFind, dcTArray2Find - сортивовка массива и поиск в массиве. На тестовом примере (2-х мерный массив 2265 записей) время сортировки сократилось с 40 сек. до 10 сек.
>> Ответитьdoctor.d32 ( jam 07.08.2006 15:11 )
5(1)Ссылочка: (+) ( григ 07.08.2006 16:06 )
не то фича не то баг dcCopyFile меняет время модификации копированного файла на время копирования ( sdo 28.02.2008 10:35 )
5(1)пришлось свою обертку простенькой CopyFile сваять, ибо надумал исповедовать новую религию - не таскать шаблон (xlt,dot) с источника, а скопировать его в Temp, потом просто сравнивать размер и дату/время модификации - если отличаются - ну тогда копируем обновленный, если нет - то берем из Temp.
маленький плюс к данной технологии - повышается удобство отладки шаблона, ибо ексел не позволяет держать открытым шаблон и открывать на его основе новую книгу. а теперь шаблон в темпе переименован, книга на основе шаблона называется иначе, ексел скромно молчит. :)
>> Ответитьа я сделал просто копирование шаблона без проверки каждый раз с игнором ошибки, если шаблон уже (+) ( Eugene Korolev 28.02.2008 11:49 )
5(1)открыт. Тоже особо не парюсь :) шаблоны не очень большие.
>> Ответить
dcFindFirst - непонятное время создания файла возвращает ( IZVER 21.04.2008 09:23 )
5(1)dcFindFirst(ИмяФайлаИмпорта,fileName1,null,null,dt1,tm1);
в tm1 - возвращает время создания файла - на 3 часа меньше, чем на самом деле (смотрю дату создания в проводнике и FAR-е).
>> ОтветитьdcFindFirst - непонятное время создания файла возвращает ( IZVER 21.04.2008 09:23 )
5(1)dcFindFirst(ИмяФайлаИмпорта,fileName1,null,null,dt1,tm1);
в tm1 - возвращает время создания файла - на 3 часа меньше, чем на самом деле (смотрю дату создания в проводнике и FAR-е).
>> ОтветитьПроверь правильно ли выставлено время на сервере приложения ( ErshovSP 21.04.2008 11:19 )
5(1), так как время создания возвращает система!
>> ОтветитьПроверял на двухзвенке ( IZVER 22.04.2008 10:34 )
5(1)Изначально проверял на двухзвенке - та же история
>> ОтветитьВ исходнике 352 строка: ( григ 23.04.2008 07:29 )
5(1)t.sec=(tdos & 0x1f)*2;
t.min=(tdos & 0x7e0)>>5;
t.hour=((tdos & 0xf800)>>11)+3; if(t.hour>=24) t.hour-=24;
Уже не помню, но кажется под 98-й время вычислялось правильно. Сейчас посмотрел - разница в 1 час с Far-ом и TC. Поправь, как надо и перекомпиль.
>> ОтветитьУ меня 3 час разницы ( IZVER 23.04.2008 07:57 )
3(2)Не знаю насколько это поможет, но выложу ( IZVER 23.04.2008 14:24 )
5(1)Специально открыл Delphi, чтобы подглядеть...
function FileDateToDateTime(FileDate: Integer): TDateTime; {$IFDEF MSWINDOWS} begin Result := EncodeDate( LongRec(FileDate).Hi shr 9 + 1980, LongRec(FileDate).Hi shr 5 and 15, LongRec(FileDate).Hi and 31) + EncodeTime( LongRec(FileDate).Lo shr 11, LongRec(FileDate).Lo shr 5 and 63, LongRec(FileDate).Lo and 31 shl 1, 0); end; {$ENDIF}
>> ОтветитьПо формулам разница - только в определении часа (+) ( григ 24.04.2008 12:42 )
5(1)У меня: t.hour=((tdos & 0xf800)>>11)+3; if(t.hour>=24) t.hour-=24;
У тебя: t.hour=tdos>>11;
Попробовал, переделал. На контрольном примере все осталось по прежнему. У меня на час меньше. Хотел тебе выслать для испытаний. Но в ответ:
Failed to deliver to 'vasyutkin@pkb.kogalym.ru'
SMTP module(domain @217.9.147.157:pkb.kogalym.ru) reports:
host pkb.kogalym.ru says:
550 5.7.0 Your server IP address is in local blacklist, bye
У нашего провайдера ты числишься спамером и он блокирует почту на тебя.
>> ОтветитьМыло.... ( IZVER 24.04.2008 12:59 )
5(1)ven1_ гав-гав маил точка ru
>> Ответить
Работа dcRandom ( sokols 18.09.2008 14:32 )
5(1)Что-то нехорошо с dcRandom получается у меня.
import "..\\MAC1\\_D32\\doctor.d32"; file a() txt append; if(not open(a, "..\\TXTFILE\\a1.txt")) [not opened]; else dcRandomize(); a.str = dcRandom(5); insert(a); end; Exit(1);
Запускаю из батника:
set i=0 :cont if %i% GTR 100 goto end term.exe -p"rslbmv32.exe 9996 12345 ..\mac1\r1.mac" set /A i=i+1 goto cont :end
Все значения в файле одинаковы.
Конечно, если циклить внутри макроса, то всё нормально, но так вот выходит, что получить числа, отличающиеся друг от друга при разных запусках макроса, не удаётся.
В ЭрСтайловском Random'е та же проблема. Там её удалось решить (плохонько, правда), вставив перед Random(5) вызов Random() (без параметра). В doctor'е даже такой фокус не проходит - предварительный вызов dcRand() ситуацию не исправляет.
>> ОтветитьПопробуй dcRand() или может dcRandomize не юзать (+) ( григ 19.09.2008 07:45 )
5(1)Больше ничем не помогу - функции системные я в них не залезу. Если знаешь системную функцию, которая тебе нужна - можно без проблем ее в doctor.d32 добавить.
>> ОтветитьРаботает нормально только так: (+) ( sokols 19.09.2008 09:58 )
5(1)связка dcRandomize() + dcRand(). Странно как-то.
Системные функции - что ты имеешь в виду? Сишные или виндовые? Если Си - то какой? Может, в какой-нибудь версии ошибка была?
>> ОтветитьУ меня юзается C++ 5.01 Borland, может в нем косяк. Если есть WinAPI-функция, можно ее подцепить. ( григ 19.09.2008 10:18 )
5(1)Not specified
>> ОтветитьВ 5.02 randomize + random отрабатывает корректно (+) ( sokols 19.09.2008 11:25 )
5(1)Твои исходники в примерах - последние, или менял что-то? Попробую откомпилить
>> ОтветитьНе хочет :-( (+) ( sokols 19.09.2008 13:02 )
5(1)Borland C++ 5.6 for Win32 Copyright (c) 1993, 2002 Borland Error E2451 doctor.cpp 3512: Undefined symbol 'tabledcText' in function TdcText::TdcText(bool)
29.08.2006 14:06 124 976 doctor.cpp
То?
>> ОтветитьВот батник для компиляции: ( григ 20.09.2008 08:07 )
5(1)del output.txt
bcc32 -5 -O -WD -c -Ih -nout\32 my\in\doctor.cpp c:\bc5\source\classlib\date.cpp c:\bc5\source\classlib\time.cpp >> output.txt
tlink32 -Tpd -ap /x /d c0d32 out\32\doctor.obj out\32\date.obj out\32\time.obj,mac\doctor.d32,,lib\rsldlm32.lib cw32 import32
import32.lib у меня от 5.02 кажись 710656 байт.
Исходник чуть другой, но на компиляцию влиять не должно.
Да, версия SDK 3.08.
>> ОтветитьНе выходит каменная чаша (+) ( sokols 22.09.2008 08:40 )
5(1)Warning doctor.cpp 3321: Style of function definition is now obsolete Error doctor.cpp 3321: { expected
SDK 3.12, если read_me.txt верить
>> ОтветитьНадо под 3.08 компилить (-) ( григ 25.09.2008 16:29 )
5(1)Not specified
>> ОтветитьА нету :-( Кинь мылом, если не жалко :-) ( sokols 25.09.2008 16:39 )
5(1)Not specified
>> ОтветитьОткомилировал, random теперь работает рандомно :-) (+) ( sokols 02.10.2008 15:50 )
5(1)Перекомпилил на 5.02 - тоже заработало, саму длм-ку обновил (-) ( григ 14.01.2009 10:22 )
5(1)Not specified
>> Ответить
проблема с именами файлов - русские имена файлов в 5_5 ( p2p 16.12.2009 11:49 )
5(1)Код в студию (+) ( григ 16.12.2009 11:57 )
5(1)5.5 ничем принципиально по линии РСЛ не отличается от 5.0.
Для копирования имя файла должно быть в ANSI.
>> ОтветитьВот рабочий пример, под Оболочкой РСЛ 5.5 работает (+) ( григ 16.12.2009 12:06 )
5(1)import doctor; name="c:\\6\\ВСЕ.rtf"; res=dcFindFile(ToANSI(name)); println(ToOEM(res)); res=dcCopyFile(ToANSI(name),ToANSI(name+"_")); println(res); end;
>> Ответитьой спасиб, оказся 2002 года длм-ка была - обновил ( p2p 16.12.2009 13:54 )
5(1)и счастье!!
>> Ответить
Непойму неправильно определяет время файла сдвиг на час ( LeonL 11.05.2010 18:06 )
5(1)println(path); dcFindFirst(path,null,null,null,null,TimeCreate,null,TimeLastAccess,null,TimeLastWrite); println(TimeCreate," ",TimeLastAccess," ",TimeLastWrite); Результат: E:\BAT\2010.05.11\A4B0X730.8NS 16:43:02 16:43:02 16:43:02 свойства файла Far: ║ File time DD.MM.YYYY hh:mm:ss ║ ║ Modification 11.05.2010 17:43:00 ║ ║ Creation 11.05.2010 17:43:00 ║ ║ Last access 11.05.2010 17:43:00 ║
Где копать не пойму?
>> ОтветитьСкачал свежак стало вобще юрунду показывать ( LeonL 11.05.2010 18:12 )
5(1)Там исходник лежит - возьми, приплюсуй 4 часа и перекомпиль. (+) ( григ 19.05.2010 12:51 )
5(1)В разных операционках да еще под разными командерами разное время выдается.
>> Ответить
dcGetComputerName - в трехзвенке показывает имя сервака )) ( KaMPiLeR 09.02.2017 13:32 )
5(1)dc Это библиотека для сервера, для удаленных lg ( deusex 09.02.2017 13:35 )
5(1)Not specified
>> Ответить