質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Q&A

0回答

491閲覧

初めて自分で書いたスクリプトがうまく機能しません。データや数値を格納するための変数を機能させるにはどうすればいいですか。

Kimiron

総合スコア0

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

0グッド

0クリップ

投稿2022/05/14 08:27

編集2022/05/14 10:32

自己紹介

プログラミング初心者です。英語が好きなので、コマンドレットだけを見れば動詞ー名詞という形でわかりやすいと思い、初めての言語にPowerShellを選びました。初めての言語には難易度が高すぎましたかね?

《どうすればいいかわからないこと》

・データや数値を参照するための別スクリプト商品名.ps1, 商品価格.ps1と、それらを格納するためのレジ.ps1の変数がうまく機能していないように初心者の自分にはみえます。
・商品名.ps1, 商品価格.ps1において、F000などの商品コードを変数化したほうがいいかどうかもわかりません。
・そもそもこのスクリプトで実現できるかもわかっていないので、もし実現不可能ならば、データをCSVファイルから引っ張ってくる方式にて解決しようとも考えています。

《試したこと》

・わからないところはネットからいろいろとコピーしてきて解決しようとした。
・とにかく変数の型を指定した。

↓レジ.ps1↓

PowerShell

1[void][Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") 2#キー判定用設定 3$rawui = $Host.ui.rawui 4$KeyStates = [System.Management.Automation.Host.ControlKeyStates] 5$Modifier = $KeyStates::LeftCtrlPressed -bor $KeyStates::RightCtrlPressed 6$KeyMap = [System.Windows.Forms.Keys] 7 8#本文 9while ($true) { 10 $Count = 0 11 $TotalPrice = 0 12 $CountStop = $false 13 while (-not $CountStop) { 14 Read-Host '購入する商品の商品コードは?' ([string] $ProductCode) | Write-Host 15 16 #単価を出す 17 try { 18 . .\'PowerShell Practice'\レジ\データベース\商品名.ps1 19 Select-Object -match ([string] $ProductCode) 20 } 21 catch { 22 $ProductName 23 } 24 try { 25 . .\'PowerShell Practice'\レジ\データベース\商品価格.ps1 26 Select-Object -match ([string] $ProductCode) 27 } 28 catch { 29 $ProductPrice 30 } 31 32 #消費税を加算する 33 if ($ProductCode -match $F???) { 34 ([UInt32] $ProductPrice) *= 1.08 35 } 36 elseif ($ProductCode -match $O???) { 37 ([UInt32] $ProductPrice) *= 1.10 38 } 39 else { 40 Write-Host 'この商品は存在しません。' 41 break 42 } 43 44 #個数を乗算する 45 Read-Host '商品の数は?' ([UInt16] $Count) | Write-Host 46 ([UInt32] $TotalPrice) += ([UInt32] $ProductPrice) * ([UInt16] $Count) 47 48 Write-Output "$ProductName : $ProductPrice * $Count" 49 50 Start-Sleep -s 10 51 52 #キー判定 53 while ($rawui.KeyAvailable) { 54 $KeyInput = $rawui.Readkey("NoEcho,IncludeKeyUp,IncludeKeyDown") 55 if (($KeyInput.VirtualKeycode -eq $KeyMap::E) -and ` 56 ($KeyInput.ControlKeyState -band $Modifier)) { 57 $CountStop = $true 58 break 59 } 60 } 61 } 62 Write-Host "$TotalPrice 円のお買い上げです。" 63}

↓商品名.ps1↓

PowerShell

1function Select-Object { 2 [OutputType([string])] 3 [CmdletBinding()] 4 param( 5 [parameter(ValueFromPipeline = $true, Mandatory = $true)] 6 [string] $ProductName 7 ) 8} 9 10F000 = リンゴS 11F001 = リンゴM 12F002 = リンゴL 13F003 = リンゴS_箱詰め 14F004 = リンゴM_箱詰め 15F005 = リンゴL_箱詰め 16F006 = ミカン_5個_袋詰め 17F007 = ミカン_20個_箱詰め

↓商品価格.ps1↓

PowerShell

1function Select-Object { 2 [OutputType([UInt32])] 3 [CmdletBinding()] 4 param( 5 [parameter(ValueFromPipeline = $true, Mandatory = $true)] 6 [UInt32] $ProductPrice 7 ) 8} 9 10F000 = 150 11F001 = 200 12F002 = 400 13F003 = 1500 14F004 = 2000 15F005 = 4000 16F006 = 400 17F007 = 1500

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2022/05/14 09:47 編集

変数が機能しないの意味がわかりません。 あと、商品名.ps1 と 商品価格.ps1 が何をしているのかわかりません。 F000 というのが変数ですか? その変数をどう使用しようとしていますか? PowerShell の変数には $ を頭につけることになっています。 また、スクリプト中で値を設定された変数は、基本的にスクリプトが終わると消えてなくなります。 スクリプトが終わっても使用したい時は、グローバル化する手もありますが、それは多くの場合非推奨なアンチパターンになります。通常は変数をグローバル化するのではなく、値のみを出力して、それを新たな変数に入れます。 全角文字を使ってはいけないところに使っている箇所もあります。 英数字は必ず半角にしましょう。
Kimiron

2022/05/14 10:20

ご質問ありがとうございます。言葉足らずですみません。 自分の実現したいことは、 ・レジ.ps1の変数を機能させたいこと ・商品名.ps1と商品価格.ps1にあるF000などの商品コードからそれぞれ商品名と商品価格をレジ.ps1に引っ張ってきたいこと まだ自分でどうしたらいいかわかっていないことは、 ・商品名.ps1と商品価格.ps1にあるF000などの商品コードを変数化したほうがいいかということ おぼろげながらわかっていることは、 ・商品名.ps1と商品価格.ps1からうまく商品名と商品価格を引っ張ってこれていないこと です。 確認しましたが英数字で全角になっている箇所はありませんでした。
Zuishin

2022/05/14 10:24

どうなれば機能したことになりますか?
Kimiron

2022/05/14 10:45

商品名.ps1と商品価格.ps1からレジ.ps1に商品名と商品価格を引っ張ってきて、レジ.ps1で価格計算を成功させ、商品ごとに「商品名 : 商品価格 * 購入数」の形で表示できれば機能したことになるはずです。
Zuishin

2022/05/14 10:54 編集

つまり、変数が機能するとは、このコードが意図通り動くことを意味していますか? もしそうなら、質問のタイトルと本文が不適切です。 そして、ただのデバッグ依頼になりますが、それはここでは低評価される質問となります。 もう少し小さく具体的な質問にした方が良いでしょう。 なぜなら、デバッグ依頼の質問と回答は、解決しても公共の役に立たないからです。 具体的な個別の問題に関する質問であれば、同じ問題を抱える人の役に立ちます。
Zuishin

2022/05/14 11:01

PowerShell の公式のデバッグツールとして、PowerShell ISE というものがありますが、今はその役を vscode に譲っています。 vscode で開いてエラー箇所を確かめ、ステップ実行を行って、どこが悪いのかを絞りこむのが良いでしょう。
Kimiron

2022/05/14 11:11 編集

すみません、おっしゃる通りです。 ただ、言い訳をさせて頂くならば、まだ自分は質問のタイトルと本文の書き方さえ知らない生まれたての雛鳥のようなものなので、ご容赦頂ければ幸いです。
Kimiron

2022/05/14 11:05

そのコードもVSCodeでかいたものです。
Kimiron

2022/05/14 11:06

これ以上はどうすればいいかわかりませんでした。
Zuishin

2022/05/14 11:41

どうすればいいか書いたんですが。
okakemetal

2022/05/15 00:41

こんにちわ ご自身で”初心者”と書かれていますので、まず進め方として、一気にすべてを進めようとするのではなく 自分の中の問題点を一つずつつぶしてから、次へ進むべきかと思います。 プログラムが一つ正常にできてから、それを流用してほかのプログラムを作成すべきと考えます。 すでにご指摘のある通り、変数って何?って部分から理解されてみてはいかがでしょうか? powershellにかかわらず、言語によって文法は違えど考え方はほぼ共通かと思いますので
Kimiron

2022/05/15 01:17

ありがとうございます。 ご指摘の通り、急いていたのかもしれません。 ゆっくりやってみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問