您能否帮助找到可以解决以下需求的 Windows 解决方案?
目前我在Notepad ++中使用正则表达式手动执行此操作,但此例程将由多人使用,并且自动方式将更好。
我有一个包含插入语句的大文本文件,它将在SQL Server中加载。
我想做的是:
1 - 插入BEGIN TRANSACTION;在文件的开头
2 - 插入COMMIT TRANSACTION;在文件的结尾处
3 - 每1000行后插入3个包含文字的新行:
承诺交易;
GO
开始交易;
4 - 将前3行从另一个文件复制到当前文件
这件事会发生在动态路径。
以下是5000行文件的示例:
输入
Line_No文字
1插入...
500插入...
1000插入...
1001插入...
2000插入...
2001插入...
5000插入...
期望的输出
Line_No文字
第一行包含来自同一路径中其他文件的文本
第二行,同一路径中的其他文件中的文本
带有同一路径中其他文件的文本的第3行
开始交易;
1插入...
500插入...
1000插入...
1001 COMMIT TRANSACTION;
1002 GO
1003 BEGIN TRANSACTION;
1004插入...
2000插入...
2001年的委员会交易;
2002 GO
2003年开始交易;
2004插入...
5000插入...
5001 COMMIT TRANSACTION;
非常感谢! :)
更新: 以下是使用@mjolinor提供的解决方案执行此任务的解决方案:
$cd = Get-Location
$PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent
$newfile = "$cd\newfile.sql"
$oldfile = "$cd\oldfile.sql"
$string = Get-Content $cd\otherfile.txt
$header = @"
:out $PSScriptRoot\log.txt
USE $string
GO
BEGIN TRANSACTION;
"@
$insert = @'
COMMIT TRANSACTION;
GO
BEGIN TRANSACTION;
'@
$header | Set-Content $newfile
Get-Content $oldfile -ReadCount 1000 |
ForEach-Object { $_,$insert | Add-Content $newfile -Force}
'COMMIT TRANSACTION;' | Add-Content $newfile
谢谢@mjolinor :-)!
答案 0 :(得分:0)
没有经过广泛测试,但我认为这应该有效:
$newfile = 'c:\somedir\newfilename.txt'
$oldfile = 'c:\somedir\oldfilename.txt'
$otherfile = 'c:\somedir\someotherfilename.txt'
$insert = @'
COMMIT TRANSACTION;
GO
BEGIN TRANSACTION;
'@
'BEGIN TRANSACTION' | Set-Content $newfile
Get-Content $oldfile -ReadCount 1000 |
ForEach-Object { $_,$insert | Add-Content $newfile }
Get-Content $otherfile -Head 3 | Add-Content $newfile