powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Перенос строки
16 сообщений из 16, страница 1 из 1
Перенос строки
    #38455795
кот_2013
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, такая проблема, есть таблица с полем Namm которая содержит методики, нужно если длина методики больше 40-ка сделать перенос оставшейся части на новую строку. Тут уже писалось об этом, но такая проблема

Если методика ГЕРПЕС 2-ГО ТИПА (ИММУНОФЕРМЕНТНЫЙ РИДЕР "HUMEN RIDER") то оставшуюся часть переносит на следующую строку

Если методика ЦВЕТНОЕ ДОПЛЕРОВСКОЕ КАРТИРОВАНИЕ СОСУДОВ ШЕИ то не переносит
Если методика ЦВЕТНОЕ ДОПЛЕРОВСКОЕ КАРТИРОВАНИЕ СОСУДОВ НИЖНИХ КОНЕЧНОСТЕЙ тоже не переносит. Почему такая проблема возникает? Вот код, помогите пожалуйста.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
dlina=len(PAKET.NAMM)
If dlina>40
DO WHILE.NOT.EOF()
	SELECT PECHTBG 
	APPEND BLANK
	REPL LIHE WITH  '№ МЕТ.:' + allt(str(PAKET.n_met)) + ' ' + allt(left(PAKET.NAMM, IIF(RAT(space(1), left(PAKET.NAMM ,41)) = 0, 40, RAT(space(1), left(PAKET.NAMM ,41))))) 
	APPEND BLANK
	REPL LIHE WITH allt(substr(PAKET.NAMM,IIF(RAT(space(1), left(PAKET.NAMM ,41)) = 0, 40, RAT(space(1), left(PAKET.NAMM ,41))))) + '  ' + 'КОЛ-ВО: ' + '1'
	APPEND BLANK
	SELECT PAKET
	SKIP
ENDDO
SELECT PECHTBG
EndIf
...
Рейтинг: 0 / 0
Перенос строки
    #38455872
кот_2013
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Никто не в курсе?
...
Рейтинг: 0 / 0
Перенос строки
    #38455884
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все нормально твой код переносит
Код: sql
1.
2.
3.
PAKET_NAMM = 'ЦВЕТНОЕ ДОПЛЕРОВСКОЕ КАРТИРОВАНИЕ СОСУДОВ НИЖНИХ КОНЕЧНОСТЕЙ'
? '№ МЕТ.:' + allt(str(PAKET_n_met)) + ' ' + allt(left(PAKET_NAMM, IIF(RAT(space(1), left(PAKET.NAMM ,41)) = 0, 40, RAT(space(1), left(PAKET_NAMM ,41))))) 
? allt(substr(PAKET_NAMM,IIF(RAT(space(1), left(PAKET_NAMM ,41)) = 0, 40, RAT(space(1), left(PAKET_NAMM ,41))))) + '  ' + 'КОЛ-ВО: ' + '1'


ищи ошибку в другом месте.

Коряво написано, привыкай всегда явно указывать алиас:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
If dlina>40
	SELECT PAKET
	SCAN
		APPEND BLANK in PECHTBG
		REPL in PECHTBG LIHE WITH  '№ МЕТ.:' + allt(str(PAKET.n_met)) + ' ' + allt(left(PAKET.NAMM, IIF(RAT(space(1), left(PAKET.NAMM ,41)) = 0, 40, RAT(space(1), left(PAKET.NAMM ,41))))) 
		APPEND BLANK in PECHTBG
		REPL in PECHTBG LIHE WITH allt(substr(PAKET.NAMM,IIF(RAT(space(1), left(PAKET.NAMM ,41)) = 0, 40, RAT(space(1), left(PAKET.NAMM ,41))))) + '  ' + 'КОЛ-ВО: ' + '1'
		APPEND BLANK in PECHTBG
	ENDSCAN
	SELECT PECHTBG
EndIf
...
Рейтинг: 0 / 0
Перенос строки
    #38455909
SoftwareBoy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
* Судя по поиску пробела, делить значение надо с переносом слов
SET MEMOWIDTH TO 40
DO WHILE !EOF('PAKET')
	IF MEMLINES(ALLTRIM(PAKET.NAMM))>1
		INSERT INTO PECHTBG (LIHE) VALUES;
			('№ МЕТ.:'+ALLTRIM(STR(PAKET.N_MET))+' '+MLINE(ALLTRIM(PAKET.NAMM),1))
		INSERT INTO PECHTBG (LIHE) VALUES;
			(MLINE(ALLTRIM(PAKET.NAMM),2)+'  КОЛ-ВО: 1')
	ELSE
* Здесь, возможно, надо что-то делать с короткими строками
	ENDIF
	SKIP IN PAKET
ENDDO
...
Рейтинг: 0 / 0
Перенос строки
    #38455918
кот_2013
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вывод происходит сначала в таблицу, затем из таблицы старые фокспрошные схемы печать идет на матричный принтер. Это может быть из-за длины поля в которое выводится строка? Просто не понимаю из-за чего так. При выводе печатается только это
ЦВЕТНОЕ ДОПЛЕРОВСКОЕ КАРТИРОВАНИЕ а продолжение непонятно почему урезается
...
Рейтинг: 0 / 0
Перенос строки
    #38455924
кот_2013
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SoftwareBoy, Вы не могли бы немного описать работу вашего кода?
...
Рейтинг: 0 / 0
Перенос строки
    #38456039
SoftwareBoy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
кот_2013,
Что там объяснять, всё в HELP написано:
MEMLINES() returns the number of lines in a memo field. The number of lines in a memo field is determined by the current value of SET MEMOWIDTH.
MLINE() returns a specific line from a memo field.
Для Фокса в данном случае нет разницы между Character и Memo.
Иду по таблице PAKET, если для вывода значения NAMM без лишних пробелов требуется более 1 строки длиной не более 40 символов - добавляю 2 записи в PECHTBG (предполагаю, что больше 2 строк не потребуется). Если требуется 1 строка - ничего не делаю (и в PECHTBG такой строки не будет).
Кстати, если все эти танцы с бубном только ради красивой печати, то можно вообще без PECHTBG обойтись.
...
Рейтинг: 0 / 0
Перенос строки
    #38456052
кот_2013
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SoftwareBoy, без этого наверное не получится обойтись, потому что печатается талон,который дается пациенту. А и потом скоро на новую программу переходим, просто эта проблема обнаружилась с печатью надо ее решить. Ваш код вставил как есть без изменений, ничего не поменялось в печати.

* Здесь, возможно, надо что-то делать с короткими строками

вот это можно пропустить? или там обязательно что-то быть должно? Дело в том что я выше просто вывожу строку если длина символов <=40, а если больше 40 то ваш код вставил. Результат такой-же
...
Рейтинг: 0 / 0
Перенос строки
    #38456067
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кот_2013код вставил как есть без изменений, ничего не поменялось в печати
)))
Читал что я тебе написал? Твой исходный код работает правильно
ошибка где-то в другом месте.
...
Рейтинг: 0 / 0
Перенос строки
    #38456075
кот_2013
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T, Читал, но я не могу разобрать где проблема. Эту тупую программу писали еще с конца 90-х и дорабатывали по мере надобности по сей день.
...
Рейтинг: 0 / 0
Перенос строки
    #38456085
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кот_2013Dima T, Читал, но я не могу разобрать где проблема.
Я тем более. Показанный кусок кода работает правильно. Значит проблема где-то еще. Целиком код только у тебя.

Отладчиком смотри что реально происходит.

Вставь BROWSE, посмотри что в PECHTBG реально записалось
Код: sql
1.
2.
3.
4.
...
SELECT PECHTBG
BROWSE
...
...
Рейтинг: 0 / 0
Перенос строки
    #38456184
SoftwareBoy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
кот_2013SoftwareBoy, без этого наверное не получится обойтись, потому что печатается талон,который дается пациенту.
Способов вагон и тележка - от форматирования строк при выводе в текстовый файл, который затем отправится на печать, до рисования отчёта. Или пациент требует талон в электронном виде? :)
кот_2013Дело в том что я выше просто вывожу строку если длина символов <=40, а если больше 40 то ваш код вставил. Результат такой-же
А вот не надо так делать. Мой код сам проверяет длину каждой строки. Ниже вариант, который выводит в PECHTBG все записи из PAKET. Короткие строки выводятся как есть.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SET MEMOWIDTH TO 40
GO TOP IN PAKET
DO WHILE !EOF('PAKET')
	IF MEMLINES(ALLTRIM(PAKET.NAMM))>1
		INSERT INTO PECHTBG (LIHE) VALUES;
			('№ МЕТ.:'+ALLTRIM(STR(PAKET.N_MET))+' '+MLINE(ALLTRIM(PAKET.NAMM),1))
		INSERT INTO PECHTBG (LIHE) VALUES;
			(MLINE(ALLTRIM(PAKET.NAMM),2)+'  КОЛ-ВО: 1')
	ELSE
		INSERT INTO PECHTBG (LIHE) VALUES ALLTRIM(PAKET.NAMM)
	ENDIF
	SKIP IN PAKET
ENDDO
...
Рейтинг: 0 / 0
Перенос строки
    #38456233
кот_2013
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SoftwareBoy, Ваш, код тоже вроде работает для интереса проверил, но Как писал Dima проблема где-то в другом месте. Я для интереса переименовал методику ЦВЕТНОЕ ДОПЛЕРОВСКОЕ КАРТИРОВАНИЕ СОСУДОВ НИЖНИХ КОНЕЧНОСТЕЙ на ГЕРПЕС 2-ГО ТИПА (ИММУНОФЕРМЕНТНЫЙ РИДЕР "HUMEN RIDER"), тоже не переносит, хотя методика ГЕРПЕС 2-ГО ТИПА (ИММУНОФЕРМЕНТНЫЙ РИДЕР "HUMEN RIDER") для отделения лаборатории переносится. Буду смотреть код дальше, спасибо всем
...
Рейтинг: 0 / 0
Перенос строки
    #38458492
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У тебя в тексте точно пробелы? Может там неразрывные пробелы? Т.е. вместо chr(32) записаны Chr(160)

Для проблемных записей что вернет

Код: sql
1.
2.
?AT(space(1), PAKET.NAMM)
?AT(chr(160), PAKET.NAMM)
...
Рейтинг: 0 / 0
Перенос строки
    #38458547
Rostislav D. Kudryashov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кот_2013, не уверен, что понял, что такое "перенос" и где и что за "строки". Что такое "методики" понять даже не мечтаю.
Но может быть речь идёт о разбиении текстовой строки на подстроки с длиной не более 40 символов и при этом желательно не рубить строку посреди "слова" строго на куски в 40 символов, но разделять подстроки на пробелах. На этот случай даю пример.
Код: plaintext
1.
2.
3.
4.
5.
SET MEMOWIDTH TO 40
m.Str_lc = REPLICATE ('123 ', 40)
FOR m.I_ln = 1 TO MEMLINES(m.Str_lc)
  ? MLINE(m.Str_lc, m.I_ln)
ENDFOR
Угадал я или нет, но в любом случае надо научиться формулировать проблему, чтоб она была ясна постороннему читателю. Тогда может, и самому станет яснее, как её решать.
...
Рейтинг: 0 / 0
Перенос строки
    #38458556
Rostislav D. Kudryashov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кот_2013, Если моя догадка о сути твоей проблемы верна и пример её решения как-то относится к делу, то добавлю, что собирать 40-символьные подстроки с разбиением исходной длинной строки не только по пробелам, но и по другим разделителям, можно с помощью ALINES().
Выкладываешь все "слова" из длинной строки в массив. В параметре nFlags должен быть установлен бит 4 (16) для "Include the parsing characters in the array". А затем складываешь подстроки из этих "слов".
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Перенос строки
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]