gpt4 book ai didi

string - 如何在 PowerShell 中执行此操作?或 : what language to use for file and string manipulation?

转载 作者:行者123 更新时间:2023-12-02 22:14:46 25 4
gpt4 key购买 nike

我应该使用什么语言进行文件和字符串操作?

这可能看起来很客观,但我认为确实不是。关于这一点,有很多话要说。例如,我可以清楚地看到,对于大多数用途来说,Perl 将是比 Java 更明显的候选者。我需要经常这样做,此时我使用 C#,但我想要一种更像脚本的语言来做到这一点。

我可以想象 Perl 会成为它的候选者,但我想在 PowerShell 中做到这一点。因为 PowerShell 可以访问 .NET 库(简单)。或者 Python 是更好的候选者吗?如果我必须学习一门新语言,Python 肯定是我的 list 上的一门语言,而不是 Perl。

例如,我想做的是读取文件,进行一些更改并再次保存。例如:打开它,给所有行编号(比如用 3 位数字)然后关闭它。
任何语言的任何示例都是受欢迎的,但越短越好。我在这里追求的是实用程序脚本,当然不是面向对象、TDDeveloped、单元测试的东西。

我非常希望看到的是(这里是 pseudocode):

open foobar.as f

foreach line in f.lines
line.addBefore(currenIteratorCounter.format('ddd') + '. ')

close f

所以:
bar.txt 

Frank Zappa
Cowboy Henk
Tom Waits

numberLines bar.txt

bar.txt

001. Frank Zappa
002. Cowboy Henk
003. Tom Waits

更新:

这里的 Perl 和 Python 示例很棒,绝对符合我的希望和期待。但是那里没有任何 PowerShell 人员吗?

最佳答案

这实际上在 PowerShell 中很容易:

function Number-Lines($name) {
Get-Content $name | ForEach-Object { $i = 1 } { "{0:000}. {1}" -f $i++,$_ }
}

我在这里做的是获取文件的内容,这将返回 String[] ,我用 ForEach-Object 迭代它并使用 -f 应用格式字符串运算符(operator)。结果只是作为另一个 String[] 退出管道如果需要,可以将其重定向到文件。

您可以使用别名将其缩短一点:
gc .\someFile.txt | %{$i=1}{ "{0:000}. {1}" -f $i++,$_ }

但我不建议将其用于函数定义。

不过,您要考虑使用两次传递,并动态构建格式字符串以适应更多行。如果有 1500 行 {0:000}获得整齐对齐的输出将不再足够。

至于哪种语言最适合此类任务,您可能会考虑以下因素
  • 代码的简洁性(Perl 在那里很难被击败,尤其是另一个答案中的那一行)
  • 代码的可读性和可维护性
  • 工具的可用性(默认情况下,Windows 上未安装 Perl 和 Python(Windows 7 后仅 PowerShell),因此部署可能会受到阻碍。)

  • 根据最后一点,您最好使用 cmd对于这个任务。代码同样非常简单:
    @echo off
    setlocal
    set line=1
    for /f "delims=" %%l in (%1) do call :process %%l
    endlocal
    goto :eof

    :process
    call :lz %line%
    echo %lz%. %*
    set /a line+=1
    goto :eof

    :lz
    if %1 LSS 10 set lz=00%1&goto :eof
    if %1 LSS 100 set lz=0%1&goto :eof
    set lz=%1&goto :eof
    goto :eof

    当然,这假设它必须在您自己的机器之外的其他地方运行。如果没有,请使用适合您需要的任何东西:-)

    关于string - 如何在 PowerShell 中执行此操作?或 : what language to use for file and string manipulation?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/992570/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com