On-line: tnsr2, гостей 0. Всего: 1 [подробнее..]
АвторСообщение



Пост N: 62
Зарегистрирован: 25.02.10
ссылка на сообщение  Отправлено: 09.02.12 18:15. Заголовок: резка строк


надо порезать для печати длиную строку (наименование контрагента) на 3 части с выравниванием по ПРАВОМУ краю и НЕ РЕЗАТЬ слова в этой строке
Пример
Есть в базе:
'ДК "Укртраснсгаз" НАК "Нафтогаз України" фiлiя УМГ "Донбастрансгаз" Новопсковське ЛВУ МГ'
Надо при печати поместить в рамку из 3х строк, каждая длиной 60 символов, типа так:
'..........ДК "Укртраснсгаз" НАК "Нафтогаз України" фiлiя УМГ'
'..........................."Донбастрансгаз" Новопсковське ЛВУ МГ'
'....................................................................................... '
(здесь точки -- пробелы, сайт частично "кушает" пустые строки)
мож кто-нить уже боролся с такой бякой?


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 9 [только новые]


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




Пост N: 2284
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 09.02.12 18:24. Заголовок: На скорую руку. Сам ..


На скорую руку. Сам допилишь в обчем ;)

 

Local a:='ДК "Укртраснсгаз" НАК "Нафтогаз України" фiлiя УМГ "Донбастрансгаз" Новопсковське ЛВУ МГ'
local i,ms
ms:=Perenos(a,60)
for i=1 to len(ms)
? padl(alltrim(ms[ i ]),60)
next

Func Perenos(strk,dlina)
local ms:={},i
for i=1 to mlcount(strk,dlina)
aadd(ms,memoline(strk,dlina,i))
next
return ms




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



Пост N: 407
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 10.02.12 00:13. Заголовок: Мой вариант func ma..


Мой вариант

func main() 
Local a:='äè "ô¬αΓαáß¡ßúáº" ìÇè "ìáΣΓ«úẠô¬αá⌡¡¿" Σi½i∩ ôîâ "ä«¡íáßΓαá¡ßúáº" ì«ó«»ß¬«óß∞¬Ñ ïéô îâ'
local len_str:=60
local res_str:={}, ibeg := 1, ik:=0
REQUEST HB_CODEPAGE_UA1251
HB_CDPSELECT( "UA1251" )
while ik<len(a)
aadd(res_str,substr(a,ibeg,len_str))
if len(res_str[len(res_str)])>=len_str
if substr(a,ik+len_str+1,1)!=" "
x1:=hb_rat(" ",res_str[len(res_str)])
res_str[len(res_str)]:=substr(a,ibeg,x1-1)
endif
ibeg := x1+1
ik+=ibeg
else
exit
endif
enddo
aadd(res_str,space(60))
aeval(res_str,{|x|qout(padl(x,len_str)," ")})
return nil


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





Пост N: 43
Зарегистрирован: 16.12.08
ссылка на сообщение  Отправлено: 10.02.12 02:21. Заголовок: Приблизительный вари..


Приблизительный вариант :

 
REQUEST HB_LANG_UAKOI8
REQUEST HB_CODEPAGE_UAKOI8

Function Main()
Local sdata:='ДК "Укртраснсгаз" НАК "Нафтогаз України" фiлiя УМГ "Донбастрансгаз" Новопсковське ЛВУ МГ'
local _len:=60,i,cTokTemp:='',aRes:={},nTokens
nTokens:= NumToken( sdata, " " )
FOR i:=1 TO nTokens
If LEN(cTokTemp)+LEN(Token( sdata, " ", i )) < _len
cTokTemp+=" "+Token( sdata, " ", i )
Else
aadd(aRes,cTokTemp);cTokTemp:=Token( sdata, " ", i )
EndIf
IF i==nTokens
aadd(aRes,cTokTemp)
ENDIF
Next
aadd(aRes,SPACE(_len))
FOR I:=1 TO LEN(aRes)
? HB_AnsiToOem(padl(aRes,_len)," ")
NEXT
Return Nil


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



Пост N: 408
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 10.02.12 10:01. Заголовок: Немного переработал,..


Немного переработал, теперь с проверкой количества необходимых строк:

FUNC main() 

LOCAL a := 'ДК "Укртраснсгаз" НАК "Нафтогаз України" фiлiя УМГ "Донбастрансгаз" Новопсковське ЛВУ МГ'
local mas
REQUEST HB_CODEPAGE_UA1251
HB_CDPSELECT( "UA1251" )
mas:=res_s(a,60,3)
?len(mas)
aeval(mas,{|x|qout(padl(x,60," "))})

RETURN nil

FUNC res_s( a, nlen, kEl )

LOCAL a_str := {}, x1

WHILE !Empty( a ).or.len(a_str)!=kEl
AAdd( a_str, SubStr( a,1,nlen ) )
x1 := 0
IF len(a)>nLen .and. SubStr( a, 1, nlen + 1 ) != " "
x1 := hb_rat( " ", a_str[len(a_str)] )
a_str[len(a_str)] := SubStr( a, 1, x1 - 1 )
ENDIF
a := iif(x1==0,substr(a,nLen+2),substr(a,x1+1))
if empty(a).and.len(a_str)<kEl
aadd(a_str,"")
endif
ENDDO

RETURN a_str



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



Пост N: 142
Зарегистрирован: 11.10.11
ссылка на сообщение  Отправлено: 10.02.12 12:41. Заголовок: santy AlexMyr Хоте..


santy AlexMyr

Хотел спросить, а чем вас функция MEMOLINE не устраивает?

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



Пост N: 410
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 10.02.12 13:14. Заголовок: Сыроежка пишет: Хот..


Сыроежка пишет:

 цитата:
Хотел спросить, а чем вас функция MEMOLINE не устраивает?



СевДон пишет:

 цитата:
на 3 части с выравниванием по ПРАВОМУ краю и НЕ РЕЗАТЬ слова в этой строке



Не ищем мы легких путей

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



Пост N: 411
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 10.02.12 13:28. Заголовок: Посмотрел, устраивае..


Посмотрел, устраивает:

func main() 
LOCAL a := 'ДК "Укртраснсгаз" НАК "Нафтогаз України" фiлiя УМГ "Донбастрансгаз" Новопсковське ЛВУ МГ'
LOCAL nLineLength := 60, nTabSize := 3, lWrap := .T.
LOCAL nLines, nCurrentLine
REQUEST HB_CODEPAGE_UA1251
HB_CDPSELECT( "UA1251" )
nLines := MLCOUNT(a, nLineLength,nTabSize, lWrap)
FOR nCurrentLine := 1 TO 3
? padl(alltrim(MEMOLINE(a, nLineLength, nCurrentLine,nTabSize, lWrap)),60," ")
NEXT
return nil


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





Пост N: 44
Зарегистрирован: 16.12.08
ссылка на сообщение  Отправлено: 10.02.12 14:07. Заголовок: func main() LOCAL ..


 
func main()
LOCAL a := 'ДК "Укртраснсгаз" НАК "Нафтогаз України" фiлiя УМГ "Донбастрансгаз" Новопсковське ЛВУ МГ'
LOCAL nLineLength := 60, nTabSize := 3, lWrap := .T.
LOCAL nLines, nCurrentLine
REQUEST HB_CODEPAGE_UA1251
HB_CDPSELECT( "UA1251" )
FOR nCurrentLine := 1 TO MLCOUNT(a, nLineLength,nTabSize, lWrap)
? HB_AnsiToOem(padl(alltrim(MEMOLINE(a, nLineLength, nCurrentLine,nTabSize, lWrap)),60," "))
NEXT
return nil



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



Пост N: 63
Зарегистрирован: 25.02.10
ссылка на сообщение  Отправлено: 10.02.12 16:06. Заголовок: спасибо за советы, м..


спасибо за советы, много думал
MLCOUNT и MEMOLINE помогли (давно их юзал и забыл)
добавить только проверку на превышение кол-ва "дробленых" строк сверх требуемого значения.
ведь в названии может быть много длинных слов

есчо раз всем спасибо

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

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