由tsv表格制作markdown表格

这篇博客介绍了一种使用PHP脚本将TSV格式的数据自动转换为Markdown表格的方法。作者首先读取TSV文件,然后通过| |符号进行处理,计算列数并添加对齐标记,最终生成符合Markdown规范的表格。此脚本适用于需要在Web端快速将TSV内容转成Markdown表格的场景。
摘要由CSDN通过智能技术生成

动机

markdown的表格是有|符号和-符号的,而tsv文件是由Tab分隔的,每次复制tsv格式的内容来制作md表格时都需要添加|和-符号,因此写了一个小脚本来实现这一个过程。

基本思路

先用\n切分得到每一行,对于每一行,用\t切分,\t可以换成其他的;
对于每一行切分后的每一个元素,使用|连接成一个字符串,然后在字符串两端加上|
接着计算表格的列数,记为cols,然后在表头下面加上cols个对齐符号,然后用|将这些对齐符号连接成一个字符串,最后两端各加上一个|

实现语言

因为我要在web端实现这个功能,通过表单接收输入,然后展示制作后的输出,所以采用PHP来实现这个功能。

输入输出与效果

输入为:

庙号姓名	年号与在位起止时间	在位时间(年)	主要事迹
太祖朱元璋	洪武(1368年——1398年)	31	建国
明惠帝朱允炆	建文(1399年——1402年)	4	削藩

输出为:

| 庙号姓名 | 年号与在位起止时间 | 在位时间(年) | 主要事迹 |
| ----- | ----- | ----- | ----- |
| 太祖朱元璋 | 洪武(1368年——1398年) | 31 | 建国 |
| 明惠帝朱允炆 | 建文(1399年——1402年) | 4 | 削藩 |

将输出复制到markdown编辑器中即可以显示成md表格了,显示效果如下:

庙号姓名年号与在位起止时间在位时间(年)主要事迹
太祖朱元璋洪武(1368年——1398年)31建国
明惠帝朱允炆建文(1399年——1402年)4削藩

实现代码

/** 
 * return a array, each element is a array 
 * storing a line of the tsv file 
 */
function read_tsv($file, $sep = "\t")
{
    $data = [];
    if (($handle = fopen($file, 'r')) != false) {
        while (($line = fgetcsv($handle, 0, $sep)) != false) { // 若第一行为空,则$line中第一个元素为NULL
            if(!empty($line[0])){
                $data[] = $line;
            }
        }
        fclose($handle);
    }
    return $data;
}

// 将内容存入tsv文件并读为二维数组
$content = $_POST['content']; //通过表单接收的输入,
$tmpfile = "tmp000000.tsv"; //存入tsv文件中
file_put_contents($tmpfile, $content);

$con = read_tsv($tmpfile); // read_tsv是我定义的函数

// 删除临时文件
$status = unlink($tmpfile);

$cols = count($con[0]);

//这里定义了markdown中左对齐、右对齐和居中对齐的三种写法
$center_align = '-----'; 
$left_align = ':-----';
$right_align = '-----:';

$result_array = array();
// 对每一行的每一个元素添加|
foreach($con as $line){
    $tmp = implode(' | ', $line);
    $tmp = '| '.$tmp.' |';
    $result_array[] = $tmp;
}

// 获取md表格的第二行,即控制列数和对齐规则的那一行
$second_line = array_fill(0, $cols, $center_align);
$second_line = implode(' | ', $second_line);
$second_line = '| '.$second_line.' |';

// 将md表格第二行加入到result_array中
array_splice($result_array, 1, 0, $second_line);

// 输出原始输入的数组
echo "<br><b>您的输入表格为:</b><br>";
echo "<pre>$content</pre>";

// 输出结果数组
echo "<br><b>转换后的md表格为:</b><br>";
foreach ($result_array as $d) {
    echo "<br> $d";
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值