Форум » [x]Harbour » Шаблон вывода » Ответить

Шаблон вывода

Dima: Есть допустим цифирь 26223.54 (заранее не известно какая будет цифра) Хочу вывести ее с разделителем разрядов ? Transform(26223.54,"999'999'999.99") // выводит ' 26'223.54 а хотелось бы так 26'223.54 , есть ли какой шаблон или функция для этого (или же писать самопал) ?

Ответов - 13

Andrey: Dima пишет: есть ли какой шаблон или функция для этого (или же писать самопал) ? Скорее всего нет. Пиши функцию после обработки Transform().

Dima: Andrey пишет: Пиши функцию после обработки Transform(). На вскидку и на скорую руку получилось так [pre2] a:=123456789.99 ? tt(transform(a,"999'999'999'999'.99")) ? tt(Transform(26223.54,"999'999'999.99")) wait Func tt(cstr) local el local i:=0 for each el in cstr i++ if isdigit(el) exit endif next return padl(substr(cstr,i),len(cstr)) [/pre2]

Andrey: Кстати, а как вывод мемо-поля сделать ? А то достала буковка Н везде при выводе мемо-поля... База в кодировке 866, приложение в 1251. Вывожу: ? ALLTRIM(MEMOTRAN(TOVAR->MREM,' ',' '))


Dima: Тоже так делаю но буквы H нет при выводе , правда база и приложение в 866 , да и MEMO не юзаю , для таких вещей использую поле "C" примерно до 250 знаков. С MEMO в своё время напарился , так как при сбое компа , как ни странно портился MEMO файл.

Sergy: Andrey пишет: Кстати, а как вывод мемо-поля сделать ? А то достала буковка Н везде при выводе мемо-поля... База в кодировке 866, приложение в 1251. Вывожу: ? ALLTRIM(MEMOTRAN(TOVAR->MREM,' ',' ')) У меня CHR(141) возникала после редактирования хоть мемо-поля, хоть простой переменной в MEMOEDIT() с "коротким" значением параметра "длина строки": [pre2]FUNCTION MemoEdit( ; cString, ; nTop, ; nLeft, ; nBottom, ; nRight, ; lEditMode, ; xUserFunction, ; nLineLength, ; nTabSize, ; nTextBuffRow, ; nTextBuffColumn, ; nWindowRow, ; nWindowColumn ) [/pre2] По умолчанию там стоит hb_default( @nLineLength , nRight - nLeft + 1 ) Я сделал 65535 - больше CHR(141) не мешают жить. Тьфу*3. Раз уж оффтопим, есть какой "заменитель" MEMOEDIT(), чтобы поддерживал SHIFT+стрелки = выделение/копирование/удаление/вставка текста, чтобы "по взрослому" ?

Sergy: По теме топика: [pre2]ATREPL(" '",Transform(26223.54,"999'999'999.99")," ")[/pre2] решает поставленную задачу: пробел с апострофом заменяет на два пробела + сохраняет заданную ширину.

Dima: Sergy Да тоже вариант !

MIKHAIL: STRTRAN(ALLTRIM(Transform(26223.54,"999 999 999.99"))," ","'")

Andrey: Всем привет ! Есть папка с файлами типа Test8_4DocOle_12.07.2018.doc, Test8_4DocOle_12.07.2018(1).doc, Test8_4DocOle_12.07.2018(2).doc и т.д. Нужно получить новое имя файла которое будет больше предыдущего на единицу. Т.е. как сам Windows сам делает при записи нового файла в папку. Хотелось бы иметь в Харборе(МиниГуи) стандартную функцию типа GetFileNameMask("Test8_4DocOle_12.07.2018") Может кто себе уже сделал ?

SergKis: Andrey [pre2] *----------------------------------------------------------------------------* FUNC _FileNameNum( cFile ) *----------------------------------------------------------------------------* LOCAL i := 0 LOCAL cExt := hb_FNameExt (cFile) LOCAL cFil := hb_FNameName(cFile) If ! hb_FileExists(cFile); RETURN cFile EndIf WHILE ( hb_FileExists(cFil + ' (' + hb_ntos(++i) + ')' + cExt) ) END RETURN ( cFil + ' (' + hb_ntos(i) + ')' + cExt ) [/pre2]

Andrey: SergKis Спасибо БОЛЬШОЕ !

Andrey: Не совсем правильно работает. Первый раз правильно, т.е. возвращает файл с путём, второй и т.д. неправильно - возвращает только файл. Я думаю что нужно модифицировать: [pre2] * ====================================================================== FUNC GetFileNameMask( cFile ) LOCAL cExt := hb_FNameExt (cFile) LOCAL cFil := hb_FNameName(cFile) LOCAL cPth := hb_FNameDir (cFile) LOCAL i := 0 If ! hb_FileExists(cFile); RETURN cFile EndIf WHILE ( hb_FileExists(cFil + '(' + hb_ntos(++i) + ')' + cExt) ) END cFile := cFil + '(' + hb_ntos(i) + ')' + cExt IF AT("\",cFile) > 0 cFile := hb_FNameName(cFile) ENDIF RETURN ( cPth + cFile ) [/pre2]

SergKis: Andrey Извини дал старый вариант. [pre2] *----------------------------------------------------------------------------* FUNC FileNameNum( cFile ) // При наличии файла добавить число версии в имя *----------------------------------------------------------------------------* LOCAL i := 0, cPth, cFil, cExt If ! hb_FileExists(cFile); RETURN cFile EndIf hb_FNameSplit(cFile, @cPth, @cFil, @cExt) WHILE ( hb_FileExists( hb_FNameMerge(cPth, cFil + ' (' + hb_ntos(++i) + ')', cExt) ) ) END RETURN hb_FNameMerge(cPth, cFil + ' (' + hb_ntos(i) + ')', cExt) [/pre2]



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