【问题标题】:Insert new line with text after n lines and 3 lines at beginning from other file - Windows [closed]在从其他文件开始的 n 行和 3 行之后插入带有文本的新行 - Windows [关闭]
【发布时间】:2016-04-27 17:05:57
【问题描述】:


您能否帮助找到一个可以解决以下需求的 Windows 解决方案?

目前我在 Notepad++ 中使用正则表达式手动执行此操作,但此例程将由多个人使用,自动方式会更好。

我有一个巨大的文本文件,其中包含将在 SQL Server 中加载的插入语句。
我要做的是:
1 - 插入 BEGIN TRANSACTION;在文件的开头
2 - 插入 COMMIT TRANSACTION;在文件的末尾
3 - 在每 1000 行之后插入 3 个带有文本的新行:
提交交易;

开始交易;
4 - 将前 3 行从另一个文件复制到当前文件

这件事会发生在动态路径中。

这是一个包含 5000 行的文件的示例:

输入

Line_No 文字
1 插入...
500 插入...
1000 插入...
1001 插入...
2000 插入...
2001年插入...
5000 插入...

所需的输出

Line_No 文字
第一行包含来自同一路径中其他文件的文本
第二行包含来自同一路径中其他文件的文本
第三行包含来自同一路径中其他文件的文本
开始交易;
1 插入...
500 插入...
1000 插入...
1001 提交交易;
1002 出发
1003 开始​​交易;
1004 插入...
2000 插入...
2001 年承诺交易;
2002 出发
2003 开始​​交易;
2004年插入...
5000 插入...
5001 提交交易;

非常感谢! :)

更新: 这是使用@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 :-) !

【问题讨论】:

  • 这不是一个问题,而是一个任务请求。请自行尝试,分享您的努力并准确描述您遇到的问题,包括您的代码应该做什么以及它实际上做了什么。
  • 你说你已经可以用正则表达式做到这一点......在PowerShell中你可以使用$text -replace 'regexpattern', 'newvalue'来替换使用正则表达式。我个人会使用某种类型的循环和计数器。
  • 也不清楚你所说的“动态路径”到底是什么意思,也不清楚在第 4 步中选择什么文件(将前 3 行从另一个文件复制到当前文件)......

标签: powershell batch-file vbscript cmd sqlcmd


【解决方案1】:

没有经过广泛测试,但我认为这应该可以工作:

$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

【讨论】:

  • 非常感谢 mjolinor。您的解决方案效果很好!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-19
  • 2012-10-30
  • 2021-10-09
  • 2020-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多