Pet*_*ter 4 string powershell scripting file-io
我应该使用什么语言进行文件和字符串操作?
这似乎是客观的,但我认为并非如此.关于这一点有很多话要说.例如,我可以清楚地看到,对于大多数用法而言,Perl将是比Java更明显的候选者.我需要经常这样做,此时我使用C#,但我想要一个更像脚本的语言来做到这一点.
我可以想象Perl会成为它的候选者,但我想在PowerShell中做到这一点,因为PowerShell可以访问.NET库(简单).或者Python是否适合它?如果我必须学习一门新语言,那么Python肯定是我的名单之一,而不是Perl.
我想要做的是,例如,读取文件,进行一些更改并再次保存.例如:打开它,对所有行(比如3位数)进行编号并关闭它.任何语言的任何例子都是受欢迎的,但越短越好.这是实用程序脚本我在这里,而不是OO,TD开发,单元测试的东西当然.
我非常希望看到的是(伪代码):
open foobar.as f
foreach line in f.lines
line.addBefore(currenIteratorCounter.format('ddd') + '. ')
close f
Run Code Online (Sandbox Code Playgroud)
所以:
bar.txt
Frank Zappa
Cowboy Henk
Tom Waits
numberLines bar.txt
bar.txt
001. Frank Zappa
002. Cowboy Henk
003. Tom Waits
Run Code Online (Sandbox Code Playgroud)
更新:
这里的Perl和Python示例非常棒,绝对符合我的希望和期望.但那里没有PowerShell人吗?
Joe*_*oey 11
这在PowerShell中实际上非常简单:
function Number-Lines($name) {
Get-Content $name | ForEach-Object { $i = 1 } { "{0:000}. {1}" -f $i++,$_ }
}
Run Code Online (Sandbox Code Playgroud)
我在这里做的是获取文件的内容,这将返回一个String[],我在其上迭代ForEach-Object并使用-f运算符应用格式字符串.结果刚刚从管道中退出,另一个String[]可以根据需要重定向到文件.
您可以使用别名缩短一点:
gc .\someFile.txt | %{$i=1}{ "{0:000}. {1}" -f $i++,$_ }
Run Code Online (Sandbox Code Playgroud)
但我不建议用于函数定义.
你想要考虑使用两个传递,然后动态构造格式字符串以适应更多行.如果有1500条线,{0:000}那么整齐排列输出就不够了.
至于哪种语言最适合此类任务,您可能会考虑诸如此类的因素
根据最后一点,您甚至可以更好地使用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
Run Code Online (Sandbox Code Playgroud)
当然,这假定它必须运行在除您自己的机器之外的其他地方.如果没有,那么使用适合您需求的任何东西:-)