【问题标题】:Convert Plain Text File to Pipe-Delimited CSV file将纯文本文件转换为管道分隔的 CSV 文件
【发布时间】:2023-03-15 11:51:01
【问题描述】:

我需要每天转换数千行的纯文本/纯文本文件,我想将其转换为使用 powershell 分隔的管道。

样本数据 6790001009100044019161020140000000892200041962020100104810000000001卡PAR 219293948539475161020111610201440000200 - 第一个管道在 9 - 18 岁时的第二个管道 - 26岁第三 - 39 岁排名第四 - 45 岁时排名第五 - 55 岁排名第六 - 57 岁,排名第七 - 8 岁 67 -第 117 名 -第十名,157 enter code here

如何将此文件转换为管道分隔文件。

【问题讨论】:

    标签: powershell-3.0


    【解决方案1】:

    您可以使用Insert() 方法。它会将字符插入到所需位置的文本中。还有其他方法可以做到这一点,例如RegEx

    $Positions=@(9,18,26,39,45,55,57,67,117,157)
    $dat = '6790001009100044019161020140000000892200041962020100104810000000001CARD PAR                                          219293948539475161020111610201440000200'
    
    $Positions | foreach {
        $dat=$dat.Insert($_,'|')
    }
    $dat
    

    请记住,如果第一个参数大于文本长度,Insert() 将失败。

    【讨论】:

    • 由于每次循环都会重新评估 $dat,因此每次迭代时 $Positions[] 的值将越来越不准确。例如,运行:$Positions=@(2,4,5,6,9) $dat = 'ABCDEFGHIJKLMNOP' $Positions | foreach { $dat $dat=$dat.Insert($_,'|') } $dat
    • @Number8 不,他们不会。如果您在位置 2 处插入 |,那么无论您之后插入什么,它都会停留在位置 2。所以只要$Positions 按升序排序就可以了。我应该提到的另一件事是Insert 是从 0 开始的。
    • @AL - 字符串的长度随着 foreach 的每次迭代而变化。除非您在创建 Positions 数组时考虑到这一点,否则您将无法获得预期的结果。
    • @Number8 我假设问题所有者希望在给定位置查看管道的结果。要按照自己的方式进行操作,只需按降序对$Positions 进行排序。这是一个解释问题:)。
    • 谢谢大家,如果我想删除相同的管道分隔符。怎么做?
    猜你喜欢
    • 2019-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-25
    • 2019-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多