Список, разделенный запятыми и кодогенерация
От: rg45 СССР  
Дата: 08.06.14 06:48
Оценка:
Доброго дня всем,

Никак мне не удается придумать красивого решения для этой задачки, может, кто-нибудь подкинет идею.

Итак, суть проблемы на синтетическом примере. Допустим, требуется сгенерировать SQL код такого запроса:

select
  foo, bar, baz, qux, quux, corge
from a.table

Сложность в том, что запятых в списке всегда на одну меньше, чем элементов. В связи с этим получается, что либо первый, либо последний элемент списка приходится генерировать особым образом, а вот этого и хочется избежать. Я пока остановился на том, что генерирую каждый элемент на отдельной строке. При этом на каждой итерации первым делом генерируется запятая для предыдущей строки, потом перенос строки и, наконец, сам элемент. Нежелательная запятая, сгенерированная с первым элементом, нейтрализуется предварительно помещенным перед списком комментарием. Таким образом, сгенерированный код примера будет выглядеть как-то так:

select
--,
  foo, 
  bar, 
  baz, 
  qux, 
  quux, 
  corge
from a.table

А скрипт, например, генератора T4 как-то так:

select
--<#
foreach (name in names)
{
#>,
  <#=name#>
<#
}
#>
from a.table

Этот способ не нравится во-первых, тем, что создает лишние сложности для того, кто будет поддерживать эти скрипты. А во-вторых, тем, что он не универсален и работает только в тех случаях, когда вообще предусмотрены какие-либо однострочные комментарии типа "//" и "--".

Буду благодарен за любые идеи.
Я жду, когда этот пидарас
Автор: Bj777x
Дата: 22.06.20
либо удалит свое хамство здесь
Автор: Bj777x
Дата: 14.10 21:26
и здесь
Автор: Bj777x
Дата: 27.09 11:34
, либо восстановит ответы.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.