毎度おなじみのシェル芸ですが、第3回シェル芸があったとのことです。
第3回シェル芸爆破デスマッチ勉強会&第21回餃子爆破定例会やってきた
前回の挑戦はこちら
- 第2回チキチキ!シェル芸人養成勉強会をPowerShellでやってみた
- Hbstudy#38シェルスクリプトでいろいろやってみよう!をPowerShellでやってみた
- 「シェルスクリプト大喜利 第八回 ~"for,while禁止"に喜びを感じる人の何と多い事か!」をPowerShellでやってみた
早速やってみました。
前提
前回同様の縛りプレイです。 なるべく1ライナーで……敢えて、変数に収めるべきところすら、そのまま利用できるところはパイプで繋ぐという制約です。
あ、繰り返しですが…一応。
※ シェル環境前提なので、なるべくAliasを利用しているのはご了承ください。 ※ 私はAlias余り好きじゃない派です。 ※ PowerShellとBashの大きな違いは | (パイプ)で渡されるのが文字列ではなくオブジェクトということを念頭に…
Get-ChildItem #ls Get-Content #cat #gc Foreach-Object #% Where-Object #? Measure-Object #measure
問題1 • 携帯電話の番号にハイフンを入れてみましょう。
まずは、ファイルを作ります。
@("09011112222","08098769876","09022221111") | Out-File .\1\tel.txt
ファイルが出来てますね。
09011112222 08098769876 09022221111
解法1. 普通に正規表現で
cat .\1\tel.txt | %{$_ -replace '(...)(....)(....)','$1-$2-$3'}
解法2. ごり押し文字抜出で
cat .\1\tel.txt | %{$_.Substring(0,3) + "-" + $_.Substring(3,4) + "-" + $_.Substring(7,4)}
解法3. 配列のjoinで
cat .\1\tel.txt | %{($_[0..2] -join "") + "-" + ($_[3..6] -join "") + "-" + ($_[7..10] -join "")}
結果表示です。いずれの解法も同じ結果です。
090-1111-2222 080-9876-9876 090-2222-1111
問題2 • 余計な文字を除去してハイフンを入れましょう。
+81...は国内の番号表記に変換します。まずは、ファイルを作ります。
@("0901-1112222","電 話 番 号 :08098769876","+81-90-2222-1111") | Out-File .\2\tel2.txt
ファイルが出来てますね。
0901-1112222 電 話 番 号 :08098769876 +81-90-2222-1111
解法1. ふとすると、-replace 演算子で正規表現処理して、こう書いてしまいますが
cat .\2\tel2.txt | %{$_ -replace "\+81","0" | %{$_ -replace "-",""} | %{$_ -match "\d*$" | Out-Null; $Matches.Values -replace '(...)(....)(....)','$1-$2-$3'}}
解法2. -replaceに-replaceを重ねてもいいので
cat .\2\tel2.txt | %{$_ -replace "\+81","0" -replace "-",""} | %{$_ -match "\d*$" | Out-Null; $Matches.Values -replace '(...)(....)(....)','$1-$2-$3'}
解法3. 当然-matchも重ねていいので
cat .\2\tel2.txt | %{$_ -replace "\+81","0" -replace "-","" -match "\d*$" | Out-Null; $Matches.Values -replace '(...)(....)(....)','$1-$2-$3'}
解法4. Out-Nullは[void]してもいい、かつ-replace演算子ではなくreplaceメソッドでstring処理でもいいですね。
cat .\2\tel2.txt | %{[void]($_.replace("+81","0").replace("-","") -match "\d*$");$Matches.Values -replace '(...)(....)(....)','$1-$2-$3'}
結果表示です。いずれの解法も同じ結果です。
090-1111-2222 080-9876-9876 090-2222-1111
問題3 • 100行に水増ししてください。
まずは、ファイルを作ります。
"あ あ あ あ あ あ あ あ あ あ あ あ !" | Out-File .\3\hoge.txt
ファイルが出来てますね。
あ あ あ あ あ あ あ あ あ あ あ あ !
解法. 単純に増殖です。
1..100 | %{cat .\3\hoge.txt}
結果表示です。
あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ ! あ あ あ あ あ あ あ あ あ あ あ あ !
問題4 • カンマ、句点を全て全角の句点に 変換してください。
出題者様へ疑問です………あの、句点って"。"なんですが……、読点"、"とカンマ","を全角の句点"。"に置き換えるものとします。(逆も同じ要領なのでいいですよね)
まずは、ファイルを作ります。
"働けど、働けど,我が暮らし、楽にならず,JITコンパイラ。" | Out-File .\4\sakubun.txt
ファイルが出来てますね。
働けど、働けど,我が暮らし、楽にならず,JITコンパイラ。
解法1. 単純に-replace演算子で
cat .\4\sakubun.txt | %{$_ -replace ",","。" -replace ",","。" -replace "、","。"}
解法2. .replaceメソッドも同様です。
cat .\4\sakubun.txt | %{$_.replace(",","。").replace(",","。").replace("、","。")}
解法3. ハッシュテーブルで変換表を作っておくと、パターンが増えても平気ですね。
begin{$string=@{","="。";","="。";"、"="。"}}process{cat .\4\sakubun.txt | % {$result = $_;$string.GetEnumerator() | %{if (!$result -match $_.Keys){$result = $line -replace $_.Key,$_.Value}}}}end{$result}
解法3が分かりにくいから改行しろ? はい。
begin{ $string=@{ ","="。" ","="。" "、"="。"} } process{ cat .\4\sakubun.txt | % { $result = $_;$string.GetEnumerator() | %{ if (!$result -match $_.Keys) { $result = $line -replace $_.Key,$_.Value } } } } end{ $result }
begin{}process{}end{}を使わないとこうです。
$string=@{ ","="。" ","="。" "、"="。" } cat .\4\sakubun.txt | % { $result = $_ $string.GetEnumerator() | %{ if (!$result -match $_.Keys) { $result = $line -replace $_.Key,$_.Value } } $result }
結果表示です。いずれの解法も同じ結果です。
働けど。働けど。我が暮らし。楽にならず。JITコンパイラ。
問題5 • 次の変換を行ってください。 – ¥_ を _ – _ を半角空白
まずは、ファイルを作ります。
"\ ダッダーン\_! _ボヨヨン\_ボヨヨン_" | Out-File .\5\dadan.txt
ファイルが出来てますね。
\ ダッダーン\_! _ボヨヨン\_ボヨヨン_
解法1. -replace 演算子で正規表現処理
cat .\5\dadan.txt | %{$_ -replace "\\_","_" -replace "_"," "}
解法2. .replace メソッドでstring処理
cat .\5\dadan.txt | %{$_.replace("\_","_").replace("_"," ")}
結果表示です。いずれの解法も同じ結果です。
\ ダッダーン ! ボヨヨン ボヨヨン
問題6 • 文字数を数えてください。
まずは、ファイルを作ります。
"あいうえお`nかきくけこ" | Out-File .\6\aiueo.txt
ファイルが出来てますね。
あいうえお かきくけこ
解法1. lengthをmeasureで
cat .\6\aiueo.txt | %{$_.length} | measure -sum
結果表示です。
Count : 2 Average : Sum : 10 Maximum : Minimum : Property :
解法2. .getenumerator()をmeasureで
cat .\6\aiueo.txt | %{$_.getenumerator()} | measure
解法3. [System.Linq.Enumerable]::ToArray()をmeasureで
cat .\6\aiueo.txt | %{[System.Linq.Enumerable]::ToArray($_)} | measure
結果表示です。解法2と3は同じ結果です。
Count : 10
Average :
Sum :
Maximum :
Minimum :
Property :
問題7 • シバンを全て「#!/usr/local/bin/bash」に変更してください
PowerShellなので、#required -Version 2.0を#required -Version 3.0に変更します。
まずは、ファイルを作ります。
@("a.ps1","b.ps1","c.ps1") | %{$file=$_;"#required -Version 2.0`necho hoge" | Out-File .\7\$file}
ファイルが出来てますね。
PS D:\document\program\powerShell\usp3> ls 7 ディレクトリ: D:\document\program\powerShell\usp3\7 Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2013/02/18 15:24 70 a.ps1 -a--- 2013/02/18 15:24 70 b.ps1 -a--- 2013/02/18 15:24 70 c.ps1
内容も問題ないようです。
#required -Version 2.0
echo hoge
解法1.バックアップを作らず差し替え。(ないわぁ)
普通にファイル操作で行うと…。
ls .\7\*.ps1 | %{$file=$_.Name; cat .\7\$file | %{$_ -replace "#required -Version 2.0","#required -Version 3.0"} | Out-File ./7/new_$file -Append;del .\7\$file; Ren ./7/new_$file $file }
あるいは、${ファイルパス}により、インプレース入れ替えもできます。が…フルパス指定を求められ、相対パスは利用できません。
@("a","b","c") | %{$ex1 ="{d:\7\$_.ps1}";$ex2 = "{d:\7\$_.ps1} -replace `"#required -Version 2.0`",`"#required -Version 3.0`"";Iex $"$ex1"=$"$ex2"}
絶対パスなど書いていられない場合はこれですね。
ls .\7\*.ps1 | %{$ex1 ="{$_}";$ex2 = "{$_} -replace `"#required -Version 2.0`",`"#required -Version 3.0`"";Iex $"$ex1"=$"$ex2"}
結果表示です。
PS D:\document\program\powerShell\usp3> ls .\7\ ディレクトリ: D:\document\program\powerShell\usp3\7 Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2013/02/18 15:30 72 a.ps1 -a--- 2013/02/18 15:30 72 b.ps1 -a--- 2013/02/18 15:30 72 c.ps1
差し替わっています。
PS D:\document\program\powerShell\usp3> cat .\7\a.ps1 #required -Version 3.0 echo hoge
解法2. オリジナルをそのままに、新しいファイルを、 new_として生成。
ls .\7\*.ps1 | %{$file=$_.Name; cat .\7\$file | %{$_ -replace "#required -Version 2.0","#required -Version 3.0"} | Out-File ./7/new_$file -Append;del .\7\$file; Ren ./7/new_$file $file }
結果表示です。
PS D:\document\program\powerShell\usp3> ls .\7\ ディレクトリ: D:\document\program\powerShell\usp3\7 Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2013/02/18 15:32 70 a.ps1 -a--- 2013/02/18 15:32 70 b.ps1 -a--- 2013/02/18 15:32 70 c.ps1 -a--- 2013/02/18 15:32 72 new_a.ps1 -a--- 2013/02/18 15:32 72 new_b.ps1 -a--- 2013/02/18 15:32 72 new_c.ps1
オリジナルはそのままで
PS D:\document\program\powerShell\usp3> cat .\7\a.ps1 #required -Version 2.0 echo hoge
結果、新しいファイルができています。
PS D:\document\program\powerShell\usp3> cat .\7\new_a.ps1 #required -Version 3.0 echo hoge
解法3. オリジナルをbak_として残して、既存ファイル内容を差し替え。
ls .\7\*.ps1 | %{$file=$_.Name;copy .\7\$file .\7\bak_$file; del .\7\$file; cat .\7\bak_$file | %{$_ -replace "#required -Version 2.0","#required -Version 3.0"} | Out-File ./7/$file -Append }
結果表示です。
PS D:\document\program\powerShell\usp3> ls .\7\ ディレクトリ: D:\document\program\powerShell\usp3\7 Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2013/02/18 15:34 72 a.ps1 -a--- 2013/02/18 15:34 72 b.ps1 -a--- 2013/02/18 15:34 70 bak_a.ps1 -a--- 2013/02/18 15:34 70 bak_b.ps1 -a--- 2013/02/18 15:34 70 bak_c.ps1 -a--- 2013/02/18 15:34 72 c.ps1
オリジナルが差し替わり
PS D:\document\program\powerShell\usp3> cat .\7\a.ps1 #required -Version 3.0 echo hoge
バックアップができています。
PS D:\document\program\powerShell\usp3> cat .\7\bak_a.ps1 #required -Version 2.0 echo hoge
解法3-2. オリジナルを$file_bak.ps1として残して、既存ファイル内容を差し替え。
拡張子の前に_bakと入れる場合は小細工をします。
ls .\7\*.ps1 | %{$file=$_.Name;$bakfile=($_.BaseName + "_bak" + $_.Extension); copy .\7\$file .\7\$bakfile; del .\7\$file; cat .\7\$bakfile | %{$_ -replace "#required -Version 2.0","#required -Version 3.0"} | Out-File ./7/$file -Append }
結果表示です。
PS D:\document\program\powerShell\usp3> ls .\7\ ディレクトリ: D:\document\program\powerShell\usp3\7 Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2013/02/18 15:38 72 a.ps1 -a--- 2013/02/18 15:38 70 a_bak.ps1 -a--- 2013/02/18 15:38 72 b.ps1 -a--- 2013/02/18 15:38 70 b_bak.ps1 -a--- 2013/02/18 15:38 72 c.ps1 -a--- 2013/02/18 15:38 70 c_bak.ps1 ``` オリジナルが差し替わり
PS D:\document\program\powerShell\usp3> cat .\7\a.ps1
required -Version 3.0
echo hoge
バックアップができています。
PS D:\document\program\powerShell\usp3> cat .\7\a_bak.ps1
required -Version 2.0
echo hoge
## 問題8 • table中のデータをスペース区切りで 抜き出してください。 まずは、ファイルを作ります。 どうせ作るなら、タグ打ちではなく、ConvertTo-HTMLを利用しましょう。
$a=[PScustomObject]@{data="a";data2="b";data3="c"};
$b=[PScustomObject]@{num=1;num2=2;num3=3};
$html = $a | ConvertTo-Html -Fragment -As Table | %{ $ -replace " cat .\8\hoge.html | ?{$_ -match " cat .\8\hoge.html | %{$ -split " Select-String -Path .\8\hoge.html -Pattern " Select-String -Path .\8\hoge.html -Pattern " New-Object IO.StreamReader((Convert-Path .\8\hoge.html),[text.Encoding]::Default) | %{$.ReadToEndAsync().Result } | %{$.replace(" a b c
1 2 3 Set-Alias l ls
Set-Alias l1 ls
Set-Alias l2 ls
Set-Alias l3 ls PS D:\document\program\powerShell\usp3> @("",1,2,3) | %{ Get-Alias "l$_"} CommandType Name ModuleName Alias l -> Get-ChildItem
Alias l1 -> Get-ChildItem
Alias l2 -> Get-ChildItem
Alias l3 -> Get-ChildItem Get-Alias | ?{$.Options -eq "None" -and $.HelpUri -eq ""} Get-Alias | ?{$.Options -eq "None" -and $.HelpUri -eq ""} | %{Remove-Item alias:$_} PS D:\Document\Program\Powershell\usp3> @("",1,2,3) | %{ Get-Alias "l$_"} Get-Alias : name 'l' を含むエイリアスは存在しないため、このコマンドは一致するエイリアスを見つけられません。
発生場所 行:1 文字:18
+ @("",1,2,3) | %{ Get-Alias "l$_"}
+ ~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (l:String) [Get-Alias], ItemNotFoundException
+ FullyQualifiedErrorId : ItemNotFoundException,Microsoft.PowerShell.Commands.GetAliasCommand Get-Alias : name 'l1' を含むエイリアスは存在しないため、このコマンドは一致するエイリアスを見つけられません。
発生場所 行:1 文字:18
+ @("",1,2,3) | %{ Get-Alias "l$_"}
+ ~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (l1:String) [Get-Alias], ItemNotFoundException
+ FullyQualifiedErrorId : ItemNotFoundException,Microsoft.PowerShell.Commands.GetAliasCommand Get-Alias : name 'l2' を含むエイリアスは存在しないため、このコマンドは一致するエイリアスを見つけられません。
発生場所 行:1 文字:18
+ @("",1,2,3) | %{ Get-Alias "l$_"}
+ ~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (l2:String) [Get-Alias], ItemNotFoundException
+ FullyQualifiedErrorId : ItemNotFoundException,Microsoft.PowerShell.Commands.GetAliasCommand Get-Alias : name 'l3' を含むエイリアスは存在しないため、このコマンドは一致するエイリアスを見つけられません。
発生場所 行:1 文字:18
+ @("",1,2,3) | %{ Get-Alias "l$_"}
+ ~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (l3:String) [Get-Alias], ItemNotFoundException
+ FullyQualifiedErrorId : ItemNotFoundException,Microsoft.PowerShell.Commands.GetAliasCommand "%%1%% @"
%%1%%
PS D:\Document\Program\Powershell\usp3> cat .\10\coco.txt
%%1%%
私はだれ?
%%2%%
ナタデココ
%%3%%
ここはどこ?
%%4%%
なかったでココに。
%%5%% cat .\10\coco.txt | ?{$ -notmatch "%%.*"} | Select-String -Pattern "\S" | ?{$.LineNumber -eq 1 -or $_.LineNumber -eq 3} Select-String -Path .\10\coco.txt -Pattern "\S" | ?{$.LineNumber -eq 2 -or $.LineNumber -eq 6} | select -ExpandProperty line cat .\10\coco.txt | ?{$_ -match ".*?" } 私はだれ?
ここはどこ? @([string]0.1243532523523,[string]-1251.331,[string]3151353) | Out-File .\延長戦\num.txt PS D:\Document\Program\Powershell\usp3> cat .\延長戦\num.txt
0.1243532523523
-1251.331
3151353 cat .\延長戦\num.txt | %{[double]$_} | measure -sum cat .\延長戦\num.txt | %{[decimal]$_} | measure -sum $a = cat .\延長戦\num.txt | %{[decimal]$_} | measure -sum
$a.sum.ToString("G17") 3150101.79335325 #double
3150101.79335325 #decimal
3150101.7933532526 #ToString(G17) cat .\延長戦\num.txt | %{$result=0}{[decimal]$result+=$_}{$result} 0.1243532523523d-1251.331+3151353 [decimal]0.1243532523523-1251.331+3151353 PS D:\Document\Program\Powershell\usp3> cat .\延長戦\num.txt | %{$result=0}{[decimal]$result += $_ }{$result}
3150101.7933532523523 0.1243532523523-1251.331+3151353 #これはdoubleになり桁落ちする&l>>>lt>>&l>r&>,"" -repla>",""}>elect>ing -Pattern "\S" | %{$.line}
$html += $b| ConvertTo-Html -Fragment -As Table | %{ $ -replace " &l>>>lt>>&l>r&>,"" -repla> ",""}>elect>ing -Pattern "\S" | %{$.line}
$html | Out-File .\8\hoge.html
ファイルが出来てますね。
t;/td>&l>>>t;>gt; lt;/td>>;/tr>>>>
t;/td>&l>>>t;>gt; lt;/td>>;/tr>>>>
#### 解法1. whereから正規表現マッチ結果を受けて残ったタグのみreplace処理。
(?<data>> "}>{$Matches.data.replace("<td>>")>lace("",> }>
#### 解法2. `tr`でsplitしてから、whereで正規表現マッチ、結果を受けて残ったタグのみreplace処理。
" | ?{$ -match "(?<data>> "}>$Matches.data.Replace("<td>>")>lace("",>}}>
#### 解法3. 読み込み時にSelect-Stringで正規表現マッチ、結果を受けて残ったタグをreplace処理。
.*</tr>> %{$_.line.replace(" ",>replace("</tr>>")>lace(" ",>re>e(" "," ">
#### 解法4. 解法3の読み込み時のSelect-Stringにおける正規表現マッチは実はこれでもいいわけで。
.*" | %{$_.line.replace("<tr>>").replace(" ",>replace("<td>>")>lace("",>}>
#### 解法5. ちなみに問題の解法例にあったような改行を無くしてからの処理はこんなに面倒になります。
rn","").replace("","").replace("</table>>").replace("
",>replace("</tr>>`r>.replace(" ",>re>e(" "," ")}>
#### 結果表示です。いずれの解法も同じ結果です。
※わざわざa b cと1 2 3を別の行に出るように調整してますのであしからず。(正直同一行の方が簡単だったのですが…問題が別の行指定のようだったので)
## 問題9 • aliasを解除してください。
まずは、Aliasを作ります。
Aliasが出来てますね。
ユーザー定義のalias全てを指定するには、次の条件で出来そうです。(単純に作ったものだけなら上記のでいいのですが)
#### 解法. 指定したAliasをaliasのpsdriveから削除
#### 結果表示です。きっちり消えています。
## 問題10 • 以下の部分だけ抽出してください。
まずはファイルを作ります。
nt私はだれ?n%%2%%ntナタデココn%%3%%ntここはどこ?n%%4%%ntなかったでココに。n%%5%%" | Out-File .\10\coco.txt
ヒアストリングを使ってもいいですね。
t私はだれ?
%%2%%
tナタデココ
%%3%%
tここはどこ?
%%4%%
tなかったでココに。
%%5%%
"@ | Out-File .\10\coco.txt
ファイルが出来てますね。
#### 解法1. 文字行だけにしてから、行を指定
#### 解法2. 初めから行を指定
#### 解法3. いや、? 含んだ行じゃ (おい
#### 結果表示です。きっちり消えています。
※本来は行間を指定するべきですが飽きたので……すいません。
## 延長戦 • 精度よく足してください (答え:3150101.7933532523523)
まずはファイルを作ります。
ファイルが出来てますね。
桁落ちが防げない。
`double`、`decimal`、`ToString(G17)`もダメ。
doubleにキャスト
decimalにキャスト
ToString(G17)
結果表示です。桁落ちしていますね…。
<del datetime="2013-02-18T08:13:10+00:00">※一桁ずつ足して[string]しかないのかなぁ…?</del>
どうやら、measureがdoubleであることを見落としていましたww
牟田口先生から、単純に[decimal]にキャストで桁落ちせずに足せることを指摘いただきましたー。
[牟田口大介さん (@mutaguchi)](https://twitter.com/mutaguchi/status/303416603083669504)
ってことでこれ。
あるいは数値リテラルでこれとか。
それかこれ。
結果表示です。大丈夫ですね。measure -sumは注意でした。
PowerShellは、明示しないと暗黙でdoubleに型変換されるので注意です。
## まとめ
<del datetime="2013-02-18T08:13:10+00:00">ちょっ、あれ? 延長戦で…ぐぬぬぬ…先生、素敵な回答プリーズ?</del>
私のTLは、怖いけど頼れる先生方が多くて嬉しい限りです!
以上の内容はhttps://tech.guitarrapc.com/entry/2013/02/18/070226より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます
モバイルやる夫Viewer Ver0.14