Crystal Reports отрезок струны

Я новичок в Crystal Reports и ищу способ отрезать строку, если строка слишком длинная, и заменить конец на ...

Поэтому я использую Crystal Reports для создания файлов Word или PDF. Проблема в том, что у меня есть текстовое поле, которое слишком мало для длинных строк.

Я хочу проверить, не слишком ли длинная строка для поля. Если это так, обрежьте строку на последнем , и замените конец на ....

Как и где я могу это сделать? Как бы выглядел код?

Я использую Crystal Reports 2011.


person Hebi    schedule 24.01.2018    source источник


Ответы (1)


Один из способов - использовать функции Len-, Left-, Instr- и Instrrev.

Следующая формула должна дать вам ожидаемый результат. (Работает только с моноширинным шрифтом.)

NumberVar MaxLen := 200;

If Len({MyTable.MyColumn}) > MaxLen Then
    //Length is > MaxLen
    If Instr(Left({MyTable.MyColumn}, MaxLen),",")>0 Then
        //comma (,) found in first 200 chars -> cut at last comma
        Left({MyTable.MyColumn}, Instrrev(Left({MyTable.MyColumn}, MaxLen), ",")-1) & "..."
    Else    
        //NO comma (,) found in first 200 chars -> cut after char 197
        Left({MyTable.MyColumn}, MaxLen-3) & "..."
Else
    //Length is <= 200  -> use the whole text
    {MyTable.MyColumn}

В этом примере максимальная длина составляет 200 символов.
Просто настройте переменную MaxLen на необходимое количество символов.

person MatSnow    schedule 24.01.2018
comment
Большое спасибо за ваш ответ. Я тестировал его, и, похоже, он не работает. Мне нужно установить конкретную настройку. как переменный размер самого поля. Могу я дать вам файл случайно, и вы быстро его посмотрите. Был бы очень признателен. - person Hebi; 26.01.2018
comment
Вы используете моноширинный шрифт, например Courier? В противном случае ширина каждого символа будет изменяться. W намного шире, чем i, и подсчет количества символов не является надежным способом предсказать, сколько символов поместится в поле, если вы не используете моноширинный шрифт. - person R. McMillan; 26.01.2018
comment
Я попробовал использовать шрифт Courier, но у меня ничего не вышло. Я поставил 120 символов до того, как закончится место в поле. Даже если в запросе выше установлено максимальное количество символов 100. Обычно я использую шрифт Verdana. - person Hebi; 29.01.2018
comment
@PhilippeHebeisen Извините, кажется, я неправильно понял ваши требования. Боюсь, что нет надежного способа добиться этого с помощью кристальных отчетов, кроме как с такой формулой и моноширинным шрифтом, как писал Р. Макмиллан. - person MatSnow; 29.01.2018
comment
@MatSnow, я попытался использовать моноширинный шрифт с тем же запросом, и это не сработало, что вы имеете в виду с такой формулой? Я не против использовать моноширинный шрифт, если он работает. - person Hebi; 29.01.2018
comment
it didnt work на самом деле не описывает проблему или что не работает. Установите моноширинный шрифт. (Например, Consolas) и установите для переменной MaxLen значение 20. Что происходит? С помощью такой формулы я просто хотел сказать, что моя формула - это просто идея, а не единственный способ вырезать текст. - person MatSnow; 29.01.2018
comment
Я имел в виду, что это не сработало, так это то, что Поле просто выдает весь текст до такой степени, что для него больше нет места. Получил 2 скриншота, как это выглядит. Я установил шрифт в Consolas для этого примера, а Query установлен на 20Chars Max. imgur.com/a/MI1ef Первый снимок экрана - это результат. Текст заканчивается на середине предложения (извините, язык программирования немецкий ...) - person Hebi; 29.01.2018
comment
Похоже, вы только что поместили в отчет исходное поле базы данных Vehicle-EquipmentFull вместо поля формулы @EqFullStringCut. ;-) - person MatSnow; 29.01.2018