Гость
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / Разделение строки на части в Crystal Reports / 7 сообщений из 7, страница 1 из 1
17.05.2006, 17:19
    #33733415
Dragon_Oleg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделение строки на части в Crystal Reports
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
19.05.2006, 12:25
    #33738214
Dragon_Oleg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделение строки на части в Crystal Reports
Ну что некто не сталкивался с подобной задачей?
Может быть возможна реализация данной задачи через подотчет?
...
Рейтинг: 0 / 0
19.05.2006, 13:32
    #33738502
Dmvrt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделение строки на части в Crystal Reports
Можно написать формулу, которая разбирает строку
Что-то подобное, но на сколько быстро это будет работать
это еще вопрос
Код: 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
19.05.2006, 14:35
    #33738813
Dragon_Oleg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделение строки на части в Crystal Reports
Многоуважаемый Dmvrt, Спасибо Вам большое за неоценимую помощь, больших успехов Вам во всех ваших начинаниях!!!
Скорость в данном отчете не так важна, так что, я думаю, ваше решение вполне подойдет.
А то я делал через подотчеты и массивы получилось, но как-то глючит, иногда.
...
Рейтинг: 0 / 0
22.05.2006, 15:42
    #33742920
Dragon_Oleg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделение строки на части в Crystal Reports
Если взять такие значения формула при формировании строки выдает
в первой строки почему-то больше 12 символов?


stringVar sSource := 'C11,C14,C17,C41,C42,C45...C50,C53,C55,C56,C88...C98';
...
Рейтинг: 0 / 0
23.05.2006, 08:55
    #33744152
Dmvrt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделение строки на части в Crystal Reports
Я же написал, что нечто подобное,
это не окончательный код, а только идея.
Все это можно реализовать, используя функции разбора
строки, а не посимвольным сканированием.
В коде отсутствуют некоторые проверки, допустим на 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
23.05.2006, 14:16
    #33745525
Dragon_Oleg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделение строки на части в Crystal Reports
Еще раз спасибо, разобрался, все прекрасно заработало.
...
Рейтинг: 0 / 0
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / Разделение строки на части в Crystal Reports / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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