用字母和符号填充
Posted
技术标签:
【中文标题】用字母和符号填充【英文标题】:Padding with Letters and Symbols 【发布时间】:2013-03-09 20:55:53 【问题描述】:我想知道如何用不是零的东西进行填充,主要是字母和标点符号。
我正在使用一个数据库来创建报告(基于数据库中的信息),然后可以将其导出到 csv 文件以在 excel 中使用。我注意到数据库和 excel 都会从我们拥有的数字中删除任何前导零(每个报告中的一件事是一个 ID 号,它是 7 位数字,并且通常前面有零,例如 0123456 或 0012345)。
数据库允许使用 javascript 计算列,因此,根据我在这个网站上找到的信息,我创建了一个计算列并添加了一个脚本来用零填充数字,这在数据库中修复了它,但在 excel 中没有。我希望做的是不仅用零填充它,而且用撇号填充它,因此在导出到 excel 时它将显示为 '0123456 这应该强制 excel 保持前导零(根据我发现的各种 excel 教程,添加数字前面的撇号将其切换为文本)。
到目前为止,适用于我的程序的添加前导零的两种方法是:
var x=PersonID;
var y="0000000";
(y + x).slice(-7);
PersonID 为 ID 提取文件的位置
或
var str =PersonID;
var pad ="0000000";
(pad+str).slice(-7)
或
var n=PersonID;
("000000" + n).slice(-7);
但是,当我将“0000000”切换到“'0000000”或“\'0000000”(以及-7 到-8)时,它只会添加一个额外的零!认为这是撇号的问题,我尝试了“A0000000”,但它只是将 A 切换为另一个零。有没有办法用非数字信息填充数字?
对不起,这有点长,我只是想提供有关我情况的所有信息。提前感谢任何知道解决方案的人:)
【问题讨论】:
【参考方案1】:我认为这是因为当您切片时,您正在删除前面的字符,其中包括您的前导“A”或“'”。试试这个:
var str =PersonID;
var pad ="0000000";
"A" + (pad+str).slice(-7)
【讨论】:
由于某种原因,当我尝试此操作时,应填写所有 ID 列表的列现在为空白。出于某种原因,每当我尝试其中包含 var str 和 var pad 的解决方案时,都会发生这种情况。有什么我应该放在前面以便程序解释它的吗?抱歉,如果这是一个愚蠢的问题,我今天早上之前从未使用过 javascript,所以这对我来说是全新的。 我想我明白了!好的,所以我发现将“A”放在它自己的前面是行不通的,但是如果我再写一行说 var x="A" 然后在 x + (pad+str).slice(-7) 下方工作!我认为这只是修改它以适应程序所接受的问题。非常感谢!!!【参考方案2】:如果你把一个字符放在垫子的前面,那么它不可避免地会被剥离,因为你的 ID 可能至少有 1 个字符长。
var id = "A0000000123"
id.slice(-7); //id = 0000123
如果您想使用 0 以外的任何值进行填充,那么只需将其设为您的 'pad' 值即可;
var pad = "AAAAAAA";
var n = pad + PersonID; //123
var paddedId = n.slice(-7) //paddedId = "AAAA123"
也许您真正想要的是从您的键盘中取出前 N 个字符,而不是最后一个。
var pad = "A000000";
var PersonID = "123";
var toTake = pad.length - PersonID.length; //number of characters to take for the pad
var paddedId = pad.slice(0,toTake) + PersonID;// "A000123"
【讨论】:
hmmm,当我尝试这些时,我要么收到一条错误消息,要么不是一列填充了 ID,而是一列填充了 [object .不确定那是什么意思。我认为您提出的最后一个解决方案(取第一个 N 字符)应该可行,但我无法弄清楚。 var PersonID =“123”中的“123”在哪里?从哪里来? 我也试过 var PersonID = PersonID (如果我想使用任何 ID,我必须输入列的名称,以便程序知道从那里提取数据)但这让我一条错误消息。 "123" 只是您尝试填充的值的一个示例。我假设 PersonID 是需要填充的值,因此您只需排除 var PersonID = "123"; 部分。您看到的错误消息是什么? 有道理,谢谢!我尝试过这种方式,但我一直得到 [object 而不是 ID 列表。我应该添加某种代码来防止这种情况发生吗? 没有看到您用来将值写入数据库的代码,我无法帮助您。同样没有错误消息,我无法进一步帮助您。我在上面发布的代码可以自行运行(link to js fiddle)。也许您可以更新您的问题以包含“写入数据库”部分。【参考方案3】:如果您正在获取 [Object object],那么 pad
或 PersonID
是一个对象,您必须将其转换为字符串。一个简单的n.toString()
应该可以解决问题,但我听说(n+"")
更快。
此外,只需将您报告的列或行更改为文本格式而不是默认格式,通用格式也应该有所帮助。
我知道我迟到了,但希望这对某人有所帮助!
【讨论】:
以上是关于用字母和符号填充的主要内容,如果未能解决你的问题,请参考以下文章
C++ - 分配一个无符号字符缓冲区,然后用一个字符串填充它