2016-06-02 2 views
1

новичок вопрос здесь.как создать разделенное запятыми значение in progress openEdge

Мне нужно создать список. но моя проблема - это лучший способ не начинать с запятой?

например:

output to /usr2/appsrv/test/Test.txt. 
def var dTextList as char. 
for each emp no-lock: 
    dTextList = dTextList + ", " + emp.Name. 
end. 
put unformatted dTextList skip. 
output close. 

тогда мой конечный результат

, jack, joe, brad 

, что это лучший способ, чтобы избавиться от ведущей запятой?

спасибо

ответ

1

Вот один из способов:

ASSIGN 
    dTextList = dTextList + ", " WHEN dTextList > "" 
    dTextList = dTextList + emp.Name 
    . 
+1

Не должен быть, когда dTextList> «»? Как он показывает, он все равно запустит список с запятой. – bupereira

+0

Вы совершенно правы - это то, что я получаю от использования редактора SE. :) Исправлена! –

+1

Я так много делаю: D – bupereira

0

Я обычно делаю

ASSIGN dTextList = dTextList + (if dTextList = '' then '' else ',') + emp.name. 
1

Это делает это без каких-либо условной логики:

for each emp no-lock: 
    csv = csv + emp.Name + ",". 
end. 
right-trim(csv, ","). 

или вы можете сделать это:

for each emp no-lock: 
    csv = substitute("&1,&2" csv, emp.Name). 
end. 
trim(csv, ","). 

Который также имеет то преимущество, что он играет красиво с неизвестными значениями (? value ...)

TRIM() обрезает обе стороны, LEFT-TRIM() имеет только ведущие символы, а RIGHT-TRIM() - символы конца.

+0

Trim уничтожит слишком много запятых, когда в качестве значения будет пустая строка. –

+0

«Слишком много» находится в глазах смотрящего. Для многих целей это может быть особенностью. Но хорошо знать об этом. –

0

подходит (ну мой коллега сделал), он придумал это:

dTextList = substitute ("&1&3&2", dTextList, emp.Name, min(dTextList,",")). 

Но это здорово, чтобы увидеть различные способы, чтобы сделать это. Спасибо за ответ

1

Моего список ванили:

output to /usr2/appsrv/test/Test.txt. 
def var dTextList as char no-undo. 
for each emp no-lock: 
    dTextList = substitute("&1, &2", dTextList, emp.Name) 
end. 
put unformatted substring(dTextList, 3) skip. 
output close. 
  1. заменитель предотвращает неизвестные из уничтожив список
  2. простого список разделители проверка вне цикла
  3. обычно покидает список разделитель не приставку, если префикс действительно должен идти так же, как в случае его вывода

Когда используя списки с ограниченным списком, вы часто можете рассмотреть создание класса списка, чтобы удалить этот неуместный шум из вашего кода, чтобы вы могли функционально просто добавить элемент в список и экспортировать список, не внося при этом никаких подробностей.

0

Это приводит к отсутствию ведущих разделителей (ограничителя) и не возиться с отделкой/подстроками/и т.д.

def var cDelim as char. 
def var dTextList as char. 
cDelim = ''. 
for each emp no-lock: 
    dTextList = dTextList + cDelim + emp.Name. 
    cDelim = ','. 
end. 
Смежные вопросы