1

对模糊的标题和标签感到抱歉,因为这个问题非常具体。

无论如何,我都不是一个大脚本编写者或编码员。我经营一个网站,该网站需要每周更新几次某些结果。结果由特殊软件创建,并以其中一种格式导出;html、pdf、doc、xls、rpt、ttx、csv、odbc、rec、rtf 或 xml。

由于我的网站使用的表格布局与导出的文件不同,因此我目前在我的和标签之间复制并粘贴信息。我只需要几分钟,但我想知道如何自动化?导出的文件如下所示:

1    John and George    12
2    Peter and Suzan    10
3    Allan and Ed        8

并且需要符合以下要求:

<table width="100%" cellspacing="0" class="tabels" id="top">
<tr>
<td colspan="3" class="tabel"><b> Groupp A</b></td>
</tr>
<tr>
<td class="tabel"><strong> 1. </strong></td>
<td class="tabel">John and George</td>
<td class="tabel">12</td>
</tr>
<tr>
<td class="tabel"><strong>2.</strong></td>
<td class="tabel">Peter and Suzan</td>
<td class="tabel">10</td>
</tr>
<tr>
<td class="tabel"><strong> 3. </strong></td>
<td class="tabel">Allan and Ed</td>
<td class="tabel">8</td>
</tr>

这可能是非常基本的。我想几个查找和替换命令应该可以解决问题。我曾尝试使用 Notepad++,但我想知道你们将如何处理这个问题?我可以使用linux或windows机器。

4

2 回答 2

0

我会使用awk这样的东西(尽管任何测试处理工具,比如 Perl,都可以胜任这项任务)。

首先是输入文件:

pax> cat testprog.in

1    John and George    12
2    Peter and Suzan    10
3    Allan and Ed        8

然后,awk脚本本身:

pax> cat testprog.awk

BEGIN {
    print "<table width=\"100%\" cellspacing=\"0\" class=\"tabels\" id=\"top\">"
    print "  <tr>"
    print "    <td colspan=\"3\" class=\"tabel\"><b> Groupp A</b></td>"
    print "  </tr>"
}
{
    print "  <tr>"
    print "    <td class=\"tabel\"><strong>" $1 ".</strong></td>"

    str = ""; for (i = 2; i < NF; i++) str = str " " $i
    print "    <td class=\"tabel\">" substr (str,2) "</td>"

    print "    <td class=\"tabel\">" $NF "</td>"
    print "  </tr>"
}
END {
    print "</table>"
}

然后,运行一个示例,以便您可以看到它的工作:

pax> awk -f testprog.awk testprog.in

<table width="100%" cellspacing="0" class="tabels" id="top">
  <tr>
    <td colspan="3" class="tabel"><b> Groupp A</b></td>
  </tr>
  <tr>
    <td class="tabel"><strong>1.</strong></td>
    <td class="tabel">John and George</td>
    <td class="tabel">12</td>
  </tr>
  <tr>
    <td class="tabel"><strong>2.</strong></td>
    <td class="tabel">Peter and Suzan</td>
    <td class="tabel">10</td>
  </tr>
  <tr>
    <td class="tabel"><strong>3.</strong></td>
    <td class="tabel">Allan and Ed</td>
    <td class="tabel">8</td>
  </tr>
</table>

至于它是如何工作的,下面会解释。

BEGINandEND子句只是控制在处理输入文件中的行之前和之后打印的内容。那就是表格本身和第一行。

对于每一行,您首先打印出一个tr标签和一个td包含该行第一个单词的标签。

td然后根据中间参数构造另一行,在过程中折叠空格。

带有td最后一个参数的 final 和一个闭包tr,就可以了。继续下一行。

于 2012-11-01T09:18:13.427 回答
0

这是一个Linuxsed解决方案:

sed 's|\([0-9]*\) *\(.*[^ ]\)  *\([0-9]*\)$|<tr><td class="tabel"><strong>\1.</strong></td><td class="tabel">\2</td><td class="tabel">\3</td></tr>|' filename > filename.html

这仅处理表格行。其他一切看起来都像静态样板文件,您应该能够使用echo脚本中的命令生成它们。

于 2012-11-01T09:18:19.120 回答