Markdown 生成降价表?

Markdown 生成降价表?,markdown,pandoc,Markdown,Pandoc,有没有办法从对象(Python/Ruby/Java/C#)生成表 我想通过编程创建一个简单的表。我有一些对象,我想将一些属性映射到标题,将集合映射到行 为什么降价?因为我想稍后手动编辑该文档。现在,整个过程如下所示: 报告引擎使用C语言# 有从中生成DOCX的对象(有中间XML或类似的东西) 我几乎总是要做一些小的修改,并且我必须用微软的Word打开docx文档 要求开发团队修复每一个bug是很麻烦的,因为他们根本没有时间立即修复,我不得不等待下一个版本 我发现,如果我想得到一个降价文档,我

有没有办法从对象(Python/Ruby/Java/C#)生成表

我想通过编程创建一个简单的表。我有一些对象,我想将一些属性映射到标题,将集合映射到行

为什么降价?因为我想稍后手动编辑该文档。现在,整个过程如下所示:

  • 报告引擎使用C语言#
  • 有从中生成DOCX的对象(有中间XML或类似的东西)
  • 我几乎总是要做一些小的修改,并且我必须用微软的Word打开docx文档
  • 要求开发团队修复每一个bug是很麻烦的,因为他们根本没有时间立即修复,我不得不等待下一个版本

我发现,如果我想得到一个降价文档,我可以很容易地编辑它,插入一些变量,并使用pandoc用给定的数据替换这些变量。但是为了获得降价,我必须知道开发人员如何在降价中生成表。

我需要做同样的事情来生成Doxygen降价表,所以我想我会与大家分享。我已经在Python2.7和3.3中成功地运行了示例代码,尽管我不能说我已经对其进行了严格的测试

#生成用于强氧风味降价的表格。见强氧剂
#有关详细信息的文档:
#   http://www.doxygen.nl/manual/markdown.html#md_tables
#用于表对齐的翻译词典
左_规则={'':'-'}
右_规则={'':':'}
def评估字段(记录、字段规格):
"""
以字段规格的类型为指导,评估记录的字段。
"""
如果类型(字段规格)为int:
返回str(记录[字段规格])
elif类型(字段规格)为str:
返回str(getattr(记录、字段和规格))
其他:
返回str(字段规格(记录))
def表格(文件、记录、字段、标题、对齐=无):
"""
从记录生成一个Doxygen风味标记表。
file——任何具有“write”方法并接受单个字符串的对象
参数
记录--Iterable。将由此生成行。
字段--每行的字段列表。每个条目可以是整数,
字符串或函数。如果条目是整数,则假定为
每个记录的索引。如果条目是字符串,则假定为
每条记录的一个字段。如果条目是函数,则用
记录及其返回值作为字段的值。
标题——列标题列表。
对齐-对对齐字符的列表。对中的第一个字符
指定标头的对齐方式,(Doxygen不遵守此要求,但
这可能看起来不错,第二个指定了中单元格的对齐方式
专栏。
可能的对齐字符包括:
''=右对齐
“^”=中间(默认为列标题)
"""
num_columns=len(字段)
assert len(标题)=num_列
#计算表格单元格数据
列=[]对于范围内的i(num_列)]
记录中的记录:
对于i,枚举中的字段(字段):
列[i]。追加(evalute_字段(记录,字段))
#填写任何缺少的对齐字符。
extended_align=如果对齐,则对齐!=无其他[]
如果len(extended_align)>num_列:
扩展对齐=扩展对齐[0:num\u列]
elif len(扩展对齐)extended_align+=[(“^”,“我需要以编程方式为一个应用程序生成降价,因此我构建了一个库并将其发布在GitHub上。希望您会发现它很有用

该项目被称为,它是一个轻量级(即最小依赖性)、可移植的.NET库(PCL),可以从.NET数据结构(如集合和字典)中生成降价。我使用它记录内部程序数据结构以进行诊断,但它也应该满足您的需要

以下是如何从集合中构建降价表:

var data = new[]
{
    new{Year = 1991, Album = "Out of Time", Songs=11, Rating = "* * * *"},
    new{Year = 1992, Album = "Automatic for the People", Songs=12, Rating = "* * * * *"},
    new{Year = 1994, Album = "Monster", Songs=12, Rating = "* * *"}
};

Console.Write(data.ToMarkdownTable());

// Produces:
//
//     Year | Album                    | Songs | Rating   
//     ----:| ------------------------ | -----:| --------- 
//     1991 | Out of Time              |    11 | * * * *  
//     1992 | Automatic for the People |    12 | * * * * *
//     1994 | Monster                  |    12 | * * *    
请注意,当使用GitHub风格的Markdown解析器解析此输出时,它将生成一个HTML表

默认情况下,列根据其数据类型对齐(数字右对齐,字符串左对齐),标题名由对象的属性名生成。如果这不是您想要的,则有许多替代可以让您更好地控制输出

还有内置的对所有和的支持。我还添加了一些我需要的额外元素类型(条形图、iOS UITableView),这些元素的实现使它们仍然遵循降价标准

我最近才将代码上传到GitHub,所以文档现在是基本的。说到这里,项目中有大量的单元测试,应该可以演示它是如何工作的


我很感激有一段时间没有人问这个问题,但我希望这个项目对某些人有用。

你没有提到Haskell。如果你能用Haskell编写一个简单的脚本,你可以使用pandoc API(特别是Text.pandoc.Builder)非常容易地创建表,并将它们写入pandoc支持的任何格式,包括markdown。我没有提到这一点,因为我不知道haskell。但是。嗯,现在我正在寻找现成的解决方案。=>markdown table。如果没有这样的解决方案,我会尝试编写类似的脚本,但是我该如何将haskell集成到.NET cod中呢e?需要做一些研究…不幸的是,Markdown(现在?)不支持表,但一些扩展支持表。特别是,Doxygen有一个很好的Markdown表扩展。R pander包就是您要找的。我忘了说,我希望听到任何反馈或建议您的
table()
函数使用
str()
不提供编码。当与Unicode输入数据一起使用时,它将引发UnicodeEncodeErrors@AlastairMcCormack,已经有一段时间了,但它一定是Python 2.7代码
var data = new[]
{
    new{Year = 1991, Album = "Out of Time", Songs=11, Rating = "* * * *"},
    new{Year = 1992, Album = "Automatic for the People", Songs=12, Rating = "* * * * *"},
    new{Year = 1994, Album = "Monster", Songs=12, Rating = "* * *"}
};

Console.Write(data.ToMarkdownTable());

// Produces:
//
//     Year | Album                    | Songs | Rating   
//     ----:| ------------------------ | -----:| --------- 
//     1991 | Out of Time              |    11 | * * * *  
//     1992 | Automatic for the People |    12 | * * * * *
//     1994 | Monster                  |    12 | * * *