ASCII表,其中域可以有换行符 [英] ASCII table where field can have newlines

查看:213
本文介绍了ASCII表,其中域可以有换行符的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下功能可显示ASCII表

 函数ascii_table(数组,标题){
            如果(!array.length){
                返回'';
            }
            VAR长度=阵列[0] .MAP(函数(_,I){
                VAR COL = array.map(函数(行){
                    如果(行[I]!=未定义){
                        返回行[I]。长度;
                    }其他{
                        返回0;
                    }
                });
                返回Math.max.apply(数学,列);
            });
            阵列= array.map(函数(行){
                返回'| '+ row.map(功能(项目一){
                    VAR大小= item.length;
                    如果(大小<长度[I]){
                        项目+ =新阵列(长度[I] -size + 1)。加入('');
                    }
                    归还物品;
                })加入('|')+'|';
            });
            VAR月='+'+ lengths.map(功能(长){
                返回新的Array(长+ 3)。加入(' - ');
            })加入('+')+'+';
            如果(标题){
                返回九月+的'\\ n'+阵列[0] +'\\ n'+月+的'\\ n'+
                    array.slice(1)。加入('\\ n')+'\\ n'+年9月;
            }其他{
                返回九月+的'\\ n'+ array.join('\\ n')+'\\ n'+年9月;
            }
        }

问题是,当细胞包含新行我最终是这样的:

<$c$c>+---------------------+--------+-------+-----+-------------------------------+------------+---------------------+
|日期|尼克|电子邮件| WWW |评论| IP |头像|
+---------------------+--------+-------+-----+-------------------------------+------------+---------------------+
| 2016年1月27日21时11分十秒|斯特凡|卡内夫| | dsfdsfsd
sdfsdf
sdfsdf
sdfdsf | 1308240552 |化身/为Default.png |
+---------------------+--------+-------+-----+-------------------------------+------------+---------------------+

我应该我在功能改变,产生这样的结果:

<$c$c>+---------------------+--------+-------+-----+----------+------------+---------------------+
|日期|尼克|电子邮件| WWW |评论| IP |头像|
+ --------------------- + -------- + ------- + ----- + ---- ------ + ------------ + --------------------- +
| 2016年1月27日21时11分十秒|斯特凡|卡内夫| | dsfdsfsd | 1308240552 |化身/为Default.png |
| | | | | sdfsdf | | |
| | | | | sdfsdf | | |
| | | | | sdfdsf | | |
+ --------------------- + -------- + ------- + ----- + ---- ------ + ------------ + --------------------- +


解决方案

您可以修改表和渲染之前之前添加新行到表:

 函数ascii_table(数组,标题){
    如果(!array.length){
        返回'';
    }    //添加
    对于(VAR I = array.length - 1; I&GT; = 0;我 - ){
        VAR排阵= [I]
        变种堆栈= [];
        对于(VAR J = 0; J&LT; row.length; J ++){
            VAR换行=行[J] .split(\\ n);
            行[J] = newLines.shift();
            stacks.push(新行);
        }
        VAR newRowsCount = stacks.reduce(功能(A,B){
            返回则为a.length&GT; b.length个? A:B;
        })。长度;
        对于(VAR K = newRowsCount - 1; K&GT; = 0; K--){
            方法Array.splice第(i + 1,0,stacks.map(功能(stackColumn){
                返回stackColumn [K] || ;
            }));
        }
    }
    //添加    VAR长度=阵列[0] .MAP(函数(_,I){
        VAR COL = array.map(函数(行){
            如果(行[I]!=未定义){
                返回行[I]。长度;
            }其他{
                返回0;
            }
        });
        返回Math.max.apply(数学,列);
    });
    阵列= array.map(函数(行){
        返回'| '+ row.map(功能(项目一){
            VAR大小= item.length;
            如果(大小&LT;长度[I]){
                项目+ =新阵列(长度[I] - 大小+ 1)。加入('');
            }
            归还物品;
        })加入('|')+'|';
    });
    VAR月='+'+ lengths.map(功能(长){
        返回新的Array(长+ 3)。加入(' - ');
    })加入('+')+'+';
    如果(标题){
        返回九月+的'\\ n'+阵列[0] +'\\ n'+月+的'\\ n'+
            array.slice(1)。加入('\\ n')+'\\ n'+年9月;
    }其他{
        返回九月+的'\\ n'+ array.join('\\ n')+'\\ n'+年9月;
    }
}

输出:

<$p$p><$c$c>+---------------------+------+--------+-----+------------------+------------+---------------------+
|日期|尼克|电子邮件| WWW |评论| IP |头像|
+ --------------------- + ------ + -------- + ----- + ----- ------------- + ------------ + --------------------- +
| 2016年1月28日十一点40分59秒|笑|哈哈// @罗| | NOCOMMENT | 1844311719 |化身/为Default.png |
| | | l.fr | |笑| | |
| | | | |笑| | |
| | | | |笑| | |
| 2016年1月10日15时十三分59秒| EHS |什么| |恩特RM评论。 | 1423172924 |化身/为Default.png |
+ --------------------- + ------ + -------- + ----- + ----- ------------- + ------------ + --------------------- +

(增加了一个新行一个电子邮件的细胞,以测试在多个列的新行)。

I have following function that display ASCII table

        function ascii_table(array, header) {
            if (!array.length) {
                return '';
            }
            var lengths = array[0].map(function(_, i) {
                var col = array.map(function(row) {
                    if (row[i] != undefined) {
                        return row[i].length;
                    } else {
                        return 0;
                    }
                });
                return Math.max.apply(Math, col);
            });
            array = array.map(function(row) {
                return '| ' + row.map(function(item, i) {
                    var size = item.length;
                    if (size < lengths[i]) {
                        item += new Array(lengths[i]-size+1).join(' ');
                    }
                    return item;
                }).join(' | ') + ' |';
            });
            var sep = '+' + lengths.map(function(length) {
                return new Array(length+3).join('-');
            }).join('+') + '+';
            if (header) {
                return sep + '\n' + array[0] + '\n' + sep + '\n' +
                    array.slice(1).join('\n') + '\n' + sep;
            } else {
                return sep + '\n' + array.join('\n') + '\n' + sep;
            }
        }

the problem is when the cell contain new line I end up with something like this:

+---------------------+--------+-------+-----+-------------------------------+------------+---------------------+
| date                | nick   | email | www | comment                       | ip         | avatar              |
+---------------------+--------+-------+-----+-------------------------------+------------+---------------------+
| 2016-01-27 21:11:10 | stefan | kanev |     | dsfdsfsd
sdfsdf
sdfsdf
sdfdsf | 1308240552 | avatars/default.png |
+---------------------+--------+-------+-----+-------------------------------+------------+---------------------+

What should I change in my function to produce the result like this:

+---------------------+--------+-------+-----+----------+------------+---------------------+
| date                | nick   | email | www | comment  | ip         | avatar              |
+---------------------+--------+-------+-----+----------+------------+---------------------+
| 2016-01-27 21:11:10 | stefan | kanev |     | dsfdsfsd | 1308240552 | avatars/default.png |
|                     |        |       |     | sdfsdf   |            |                     |
|                     |        |       |     | sdfsdf   |            |                     |
|                     |        |       |     | sdfdsf   |            |                     |
+---------------------+--------+-------+-----+----------+------------+---------------------+

解决方案

You could modify the table and add the new rows to the table before before rendering it:

function ascii_table(array, header) {
    if (!array.length) {
        return '';
    }

    //added
    for (var i = array.length - 1; i >= 0; i--) {
        var row = array[i];
        var stacks = [];
        for (var j = 0; j < row.length; j++) {
            var newLines = row[j].split("\n");
            row[j] = newLines.shift();
            stacks.push(newLines);
        }
        var newRowsCount = stacks.reduce(function(a, b) {
            return a.length > b.length ? a : b;
        }).length;
        for (var k = newRowsCount - 1; k >= 0; k--) {
            array.splice(i + 1, 0, stacks.map(function(stackColumn) {
                return stackColumn[k] || "";
            }));
        }
    }
    //added

    var lengths = array[0].map(function(_, i) {
        var col = array.map(function(row) {
            if (row[i] != undefined) {
                return row[i].length;
            } else {
                return 0;
            }
        });
        return Math.max.apply(Math, col);
    });
    array = array.map(function(row) {
        return '| ' + row.map(function(item, i) {
            var size = item.length;
            if (size < lengths[i]) {
                item += new Array(lengths[i] - size + 1).join(' ');
            }
            return item;
        }).join(' | ') + ' |';
    });
    var sep = '+' + lengths.map(function(length) {
        return new Array(length + 3).join('-');
    }).join('+') + '+';
    if (header) {
        return sep + '\n' + array[0] + '\n' + sep + '\n' +
            array.slice(1).join('\n') + '\n' + sep;
    } else {
        return sep + '\n' + array.join('\n') + '\n' + sep;
    }
}

Output:

+---------------------+------+--------+-----+------------------+------------+---------------------+
| date                | nick | email  | www | comment          | ip         | avatar              |
+---------------------+------+--------+-----+------------------+------------+---------------------+
| 2016-01-28 11:40:59 | lol  | lol@lo |     | nocomment        | 1844311719 | avatars/default.png |
|                     |      | l.fr   |     | lol              |            |                     |
|                     |      |        |     | lol              |            |                     |
|                     |      |        |     | lol              |            |                     |
| 2016-01-10 15:13:59 | ehs  | what   |     | ente rm comment. | 1423172924 | avatars/default.png |
+---------------------+------+--------+-----+------------------+------------+---------------------+

(Added a new line in one email cell, to test new lines in multiple columns).

这篇关于ASCII表,其中域可以有换行符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆