【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?

PowerShell初心者です。この度、PowerShellを使ってテキスト編集をすることになりましたが、どこから手をつけたらいいのかいまいち分かりません。
編集しようと思っているのは以下についてですが、どのようにコーディングしたら動かせるのかご教示いただけませんでしょうか。
よろしくお願いいたします。



(編集したいこと)
①編集前ファイル(lst01.txt)を、10バイトずつ改行コードを投入し、編集中間ファイル(lst02.txt)へ出力します。

②編集中間ファイル(lst02.txt)のデータから、abcdefg(先頭7バイト)を含む行のデータを削除し、編集後ファイル(lst03.txt)へ出力します。

※abcdefgxxxのうち、abcdefgは固定、xxxは連番です。001のみの時もあれば、001~005の時、001~007までの時とかもあります。
※abcdefgxxx以外のデータ件数は、その時によって異なります。



(実行例)
◎編集前ファイル lst01.txt
abcdefg001111111111122222222223333333333abcdefg0024444444444555555555566666666667777777777

◎編集中間ファイル lst02.txt
abcdefg001
1111111111
2222222222
3333333333
abcdefg002
4444444444
5555555555
6666666666
7777777777

◎編集後ファイル lst03.txt
1111111111
2222222222
3333333333
4444444444
5555555555
6666666666
7777777777

質問者からの補足コメント

  • うれしい

    siffon9様

    丁寧な回答をして頂き、ありがとうございます。
    回答していただいた内容で、問題なく動きそうです。

    もし可能でしたら追加でご質問させて頂きたいのですが、
    lst03.txtでできたファイルからさらに編集をしてlst04.txtを作ってみたいと思っています。

    作ってみたい内容は、以下のような感じですが、
    このような変換もできますでしょうか。


    (lst04.txtにできる結果)
    半角スペース(4桁分挿入)・111(lst03の3バイト目から5バイト目まで)・AAA(3桁分挿入)・半角スペース(2桁分挿入)・20161128(システム日付8桁) … 全20バイトです
    △△△△111AAA△△20161128
    △△△△222AAA△△20161128
         :
         :
         :
    △△△△777AAA△△20161128

    No.1の回答に寄せられた補足コメントです。 補足日時:2016/11/28 11:04

A 回答 (2件)

> 作ってみたい内容は、以下のような感じですが、


> このような変換もできますでしょうか。

もちろん可能ですが、そのまま回答しては質問者様のためにもなりませんので要点だけ回答します。

システム日付8桁の文字列の求め方は
(Get-Date).ToString("yyyymmdd")

文字列の連結は ’+’で可能です。
例:"Hello " + "World" → "Hello World"

あとはNo.1で回答した内容の動作を理解すれば作れます。
がんばってみて下さい。
    • good
    • 0
この回答へのお礼

ありがとう

siffon9様

補足質問の回答もして頂き、ありがとうございました。
回答そのものではなく、考え方をご教授いただけただけで十分ありがたいです。

本日、siffon9様から教わった考え方を参考にさせて頂き、
他のパターンでも日付取得をしてみたりして、無事に動作しました。

他にもエラーチェック等もかけたいので、
明日以降も作成してみます。
ありがとうございました。

お礼日時:2016/11/30 22:47

こんな感じでいかがですか?


※lst02.txt isl03.txtには追加モードで書き込んでいるので、元からこのファイルが存在する場合には予め削除することが必要です。


$file1 = "c:\powershell\lst01.txt"
$file2 = "c:\powershell\lst02.txt"
$file3 = "c:\powershell\lst03.txt"
$prefix = "abcdefg"

$buf = Get-Content $file1
for ($i = 0; $i -lt $buf.Length; $i += 10){
$line = $buf.Substring($i,10)
Out-File $file2 -Append -InputObject $line
}

$ary = @(Get-Content $file2)
foreach($line in $ary){
if($line.SubString(0,7) -ne $prefix){
Out-File $file3 -Append -InputObject $line
}
}
この回答への補足あり
    • good
    • 0
この回答へのお礼

解決しました

siffon9様

この度はご多忙のところ、お教え頂きありがとうございました。
回答していただいた内容で問題なく動作しました。

この後もファイルレイアウトで要望事項が増えましたが、
教えたいただいた内容を応用すればできそうですので、
参考にさせて頂きます。

また、lst02.txtやlst03.txtも処理終了後に削除するように
別バッチを動かして対応いたします。

ありがとうございました。

お礼日時:2016/11/30 22:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!