Powershell ForEach-Objectの罠

結論

 ループを抜けるには、returnっぽい。

背景・経緯

 作業が面倒だから、退屈なことはpowershellにやらせようと思った次第。chatGPTの相乗効果で本当に楽になる。もはや何も考えていない。素晴らしい。だから、無知は罪だった・・・。

このようなソースコードを書いて、楽をしようとしてました。

 別の生成ツールがSQLを書いてはくれるのだが、INSERTとDELETEしか吐き出さない。サクラエディターとかでよしなに、置き換えればいいのだが、面倒だし、別のツールを作るためのインプットにもしようかなと考えた。

# 入力ファイルと出力ファイルのパスを設定
$inputFilePath = "C:\path\to\input.sql"
$outputFilePath = "C:\path\to\output.sql"

try {
    # 入力ファイルが存在するか確認
    if (-not (Test-Path -Path $inputFilePath)) {
        throw "入力ファイルが見つかりません:$inputFilePath"
    }

    # 出力ファイルが存在する場合は削除
    if (Test-Path -Path $outputFilePath) {
        Remove-Item -Path $outputFilePath -ErrorAction Stop
    }

    # 入力ファイルを1行ずつ読み込み
    Get-Content -Path $inputFilePath -ErrorAction Stop | ForEach-Object {
        $line = $_

        # 空行や空白のみの行をスキップ
        if ($line -match '^\s*$') {
            continue
        }
        # DELETE文の場合は、SELECT * FROMに置き換える
        if ($line -like "*DELETE*") {
            $line = $line -replace "DELETE", "SELECT * FROM"
        }
        Add-Content -Path $outputFilePath -Value $line -ErrorAction Stop
    }
    Write-Output "処理が完了しました。出力ファイル:$outputFilePath"
}
catch {
    # エラーメッセージを表示
    Write-Host "エラーが発生しました: $_" -ForegroundColor Red
}

昔だったら、このコード、半日ぐらいなのかな。だがしかし、生成系AIは魔力!そして怠け者な自分にはまさに最高のパートナー!

自分>1分でやれ

chatGPT>ハイ・・・

ジャーン

もはややめられませんな。

現実は甘くはなかった・・・

 よし、これで今日も成果物っぽいものもできたし、帰ろう。ささっと検証してとっとと帰ろう。

・・・

なぜだか知らないが、一部しか振り分け処理ができてない。タイポはなさそうなのに・・・。おかしいぞ。インプットファイルの中身か?文字コードでの問題はよくある・・・心配ない、10分格闘して、サラッと帰ろう。

・・・

なぜだ、改行コードは普通なのに。何回やっても、目的が果たせない。chatGPTは同じ答えしか言わない。もう、30分も経過してしまった。

くそ。もう諦めるか。いいや、秘伝、コンソールに出力!

・・・?For-Each { Wirte-Host $_ } だとコンソールでは、出力している・・・?

さらに15分経過・・・

だめだ。もうわからない・・・

continueがどうしてcontinueしないんだ?もしかして

そう、returnだった・・・・

無知の罪

  いやはや、本当に、知らないは罪なのかもしれない・・・。某少年漫画のワンシーンではないが、解決した時、真っ先にあのシーンが浮かんでしまった。不勉は不便を生み出すな・・・。

雑感

 それでも、やっぱり生成系AIはやめられれないのでした。なんという魔力。退屈なことはchatGPTにやらせよう。そのうち、自分の代わりにchatGPTが働いてくれないかな?と思った次第でした。

コメント

タイトルとURLをコピーしました