源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

PowerShell比较文本文件的两个方法

  • 时间:2022-08-21 02:18 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:PowerShell比较文本文件的两个方法
[b]需求:[/b]比较两个文本文件,不相等时输出行号和列号,和开始不相等的字符。 [b]方法一:Compare-Object [/b]利用PowerShell命令Compare-Object,非常值得学习。
[u]复制代码[/u] 代码如下:
function Compare-Files{  param(  $file1,  $file2,  [switch]$IncludeEqual  )  $content1 = Get-Content $file1  $content2 = Get-Content $file2  $comparedLines = Compare-Object $content1 $content2 -IncludeEqual:$IncludeEqual |  group { $_.InputObject.ReadCount } | sort Name  $comparedLines | foreach {  $curr=$_  switch ($_.Group[0].SideIndicator){ “==” { $right=$left = $curr.Group[0].InputObject;break} “=>” { $right,$left = $curr.Group[0].InputObject,$curr.Group[1].InputObject;break } “<=" { $right,$left = $curr.Group[1].InputObject,$curr.Group[0].InputObject;break }  }  [PSCustomObject] @{  Line = $_.Name  Left = $left  Right = $right  }  }  }
[b]方法二,使用流处理比较[/b] 解释:没有使用内置的string相等比较,而是定义了函数 Diff-String,可以返回字符串首次不相等时的索引。
[u]复制代码[/u] 代码如下:
function Diff-Txt([io.fileinfo]$firstFile,[io.fileinfo]$secondFile) {     #参数判断     if( -not $firstFile.Exists)     {         throw "$firstFile 不存在"     }     if( -not $secondFile.Exists)     {         throw "$secondFile 不存在"     }     $sr1=[IO.StreamReader]$firstFile.FullName     $sr2=[IO.StreamReader]$secondFile.FullName     #内部函数:比较字符串     #返回-1表示相等,返回其它表示从$str1开始不等的索引     function Diff-String([string]$str1,[string]$str2)     {         for( $i=0; $i -lt $str1.Length; $i++)         {             if($i -lt $str2.Length)             {                 if($str1[$i] -cne $str2[$i]){ return $i }             }             else { return $i }         }         if($str2.Length -gt $i ) { return $i }         return -1     }     # firstFile 没到文件末尾     $line=1     while(-not $sr1.EndOfStream)     {         $str1 = $sr1.ReadLine()         # secondFile 到了文件末尾         if($sr2.EndOfStream)         {             Write-Host "=> [$line 行,1 列]"         }         # secondFile 没到文件末尾         else         {             $str2 = $sr2.ReadLine()             $result = Diff-String -str1 $str1 -str2 $str2             if($result -ne -1)             {                 Write-Host "<> [$line 行,$result 列] 字符->" -NoNewline                 Write-Host  $str1[$result]   -ForegroundColor red             }         }         $line++     }     # 第二个文件没到文件末尾     while( -not $sr2.EndOfStream)     {         $str2 = $sr2.ReadLine()         Write-Host "<= [$line 行,1 列]"     }     # 关闭文件流     $sr1.Close()     $sr2.Close() }
[b]测试用例一[/b] 输入 第一个文件内容为:
[u]复制代码[/u] 代码如下:
PowerShell 中文博客 jb51.net
荔非苔 第二个文件内容为:
[u]复制代码[/u] 代码如下:
PowerShell 中文播客 jb51.Net 荔非苔 Mosser Lee
输出:
[img]http://files.jb51.net/file_images/article/201404/2014416134025664.png?2014316134053[/img]
 
[b]测试用例二[/b] 输入 第一个文件内容为:
[u]复制代码[/u] 代码如下:
玉树临风 马上伊利 文章做作
第二个文件内容为:
[u]复制代码[/u] 代码如下:
玉树临疯
输出:
[img]http://files.jb51.net/file_images/article/201404/2014416134136961.png?2014316134145[/img]
文章出处:http://www.pstips.net/
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部