powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / Разделение строки на части в Crystal Reports
7 сообщений из 7, страница 1 из 1
Разделение строки на части в Crystal Reports
    #33733415
Dragon_Oleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Crystal Reports
Есть поле, которое берется из базы и представляет собой длинную строчку C1,C2,C4...C8,С17,С19,С21,С22..С25
Строка полностью не влезает в поле, которое помещается не
больше 12 символов. Как лучше сделать так чтобы в каждой строке было по 2-3 символа, если элементы представлены в таком виде C4...С9, то под них выделять отдельную строчку

Результат, который должен получиться:
С1,С2,
C4...C8,
С17,С19,С21,
С22...С25

Как лучше всего разделить эту на части?

Я подумал, что лучше всего эту строку разбить в массив и сделал
вот так
Local StringVar Array b;
Redim b[30];
b := Split ({Bom.Part Reference},",");

А как делать дальше хороших идей пока не придумал, так что помогите, пожалуйста?
...
Рейтинг: 0 / 0
Разделение строки на части в Crystal Reports
    #33738214
Dragon_Oleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну что некто не сталкивался с подобной задачей?
Может быть возможна реализация данной задачи через подотчет?
...
Рейтинг: 0 / 0
Разделение строки на части в Crystal Reports
    #33738502
Dmvrt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно написать формулу, которая разбирает строку
Что-то подобное, но на сколько быстро это будет работать
это еще вопрос
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
stringVar sSource := 'C1,C2,C4...C8,С17,С19,С21,С22..С25';
stringVar sDest := '';
stringVar s := '';
stringVar sTmp := '';
numberVar i;
booleanVar bLastDots := False;

for i :=  1  to Len(sSource) step  1  do
(
  if sSource[i] <> "," then
    sTmp := sTmp + sSource[i]
  else
  (
    sTmp := sTmp + sSource[i];
    //если есть ... то формируем отдельную строку
    if (sTmp like "*..*") then
    (
      bLastDots := True;
      if s <> "" then
        sDest := sDest + s + chr( 13 )
      else
        if sDest <> "" then
          sDest := sDest + chr( 13 );
      sDest := sDest + sTmp;
      s := '';
      sTmp := '';
    )
    else
    //иначе смотрим на длину строки
    (
      if ((Len(s) + Len(sTmp)) >  12 ) then
      (
        bLastDots := False;
        if sDest <> "" then
          sDest := sDest + chr( 13 );
        sDest := sDest + s;
        s := sTmp;
      )
      else
        s := s + sTmp;
      sTmp := '';
    );
  );
);
//заносим оставшиеся значения
if s <> "" then
(
  if sDest <> "" then
    sDest := sDest + chr( 13 );
  sDest := sDest + s;
  if (s like "*..*") then
    bLastDots := True;
);

if sTmp <> "" then
(
  if (sTmp like "*..*") then
  (
    if sDest <> "" then
      sDest := sDest + chr( 13 );
    sDest := sDest + sTmp;
  )
  else
  (
    if bLastDots then
    (
      if sDest <> "" then
        sDest := sDest + chr( 13 );
    )
    else
    (
      if ((Len(s) + Len(sTmp)) >  12 ) then
        if sDest <> "" then
          sDest := sDest + chr( 13 );
    );
    sDest := sDest + sTmp;
  );
);
sDest := sDest;
...
Рейтинг: 0 / 0
Разделение строки на части в Crystal Reports
    #33738813
Dragon_Oleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Многоуважаемый Dmvrt, Спасибо Вам большое за неоценимую помощь, больших успехов Вам во всех ваших начинаниях!!!
Скорость в данном отчете не так важна, так что, я думаю, ваше решение вполне подойдет.
А то я делал через подотчеты и массивы получилось, но как-то глючит, иногда.
...
Рейтинг: 0 / 0
Разделение строки на части в Crystal Reports
    #33742920
Dragon_Oleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если взять такие значения формула при формировании строки выдает
в первой строки почему-то больше 12 символов?


stringVar sSource := 'C11,C14,C17,C41,C42,C45...C50,C53,C55,C56,C88...C98';
...
Рейтинг: 0 / 0
Разделение строки на части в Crystal Reports
    #33744152
Dmvrt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я же написал, что нечто подобное,
это не окончательный код, а только идея.
Все это можно реализовать, используя функции разбора
строки, а не посимвольным сканированием.
В коде отсутствуют некоторые проверки, допустим на IsNull,
при присвоении значения поля и т.д.
Поэтому предлагаю разобраться как это работает и подправить
данный код.
А насчет данной ошибки:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
    //если есть ... то формируем отдельную строку
    if (sTmp like "*..*") then
    (
      bLastDots := True;
      if s <> "" then
      (
        if sDest <> "" then  // добавить проверку
          sDest := sDest + chr( 13 );
        sDest := sDest + s + chr( 13 );
      )
      else
        if sDest <> "" then
          sDest := sDest + chr( 13 );
      sDest := sDest + sTmp;
      s := '';
      sTmp := '';
    )
...
Рейтинг: 0 / 0
Разделение строки на части в Crystal Reports
    #33745525
Dragon_Oleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще раз спасибо, разобрался, все прекрасно заработало.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / Разделение строки на части в Crystal Reports
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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