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

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

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

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

関数

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

受付中

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

Kimiron
Kimiron

総合スコア0

PowerShell

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

関数

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

0回答

-2評価

0クリップ

143閲覧

投稿2022/05/14 08:27

編集2022/05/15 10:17

自己紹介

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

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

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

《試したこと》

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

↓レジ.ps1↓

PowerShell

[void][Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") #キー判定用設定 $rawui = $Host.ui.rawui $KeyStates = [System.Management.Automation.Host.ControlKeyStates] $Modifier = $KeyStates::LeftCtrlPressed -bor $KeyStates::RightCtrlPressed $KeyMap = [System.Windows.Forms.Keys] #本文 while ($true) { $Count = 0 $TotalPrice = 0 $CountStop = $false while (-not $CountStop) { Read-Host '購入する商品の商品コードは?' ([string] $ProductCode) | Write-Host #単価を出す try { . .\'PowerShell Practice'\レジ\データベース\商品名.ps1 Select-Object -match ([string] $ProductCode) } catch { $ProductName } try { . .\'PowerShell Practice'\レジ\データベース\商品価格.ps1 Select-Object -match ([string] $ProductCode) } catch { $ProductPrice } #消費税を加算する if ($ProductCode -match $F???) { ([UInt32] $ProductPrice) *= 1.08 } elseif ($ProductCode -match $O???) { ([UInt32] $ProductPrice) *= 1.10 } else { Write-Host 'この商品は存在しません。' break } #個数を乗算する Read-Host '商品の数は?' ([UInt16] $Count) | Write-Host ([UInt32] $TotalPrice) += ([UInt32] $ProductPrice) * ([UInt16] $Count) Write-Output "$ProductName : $ProductPrice * $Count" Start-Sleep -s 10 #キー判定 while ($rawui.KeyAvailable) { $KeyInput = $rawui.Readkey("NoEcho,IncludeKeyUp,IncludeKeyDown") if (($KeyInput.VirtualKeycode -eq $KeyMap::E) -and ` ($KeyInput.ControlKeyState -band $Modifier)) { $CountStop = $true break } } } Write-Host "$TotalPrice 円のお買い上げです。" }

↓商品名.ps1↓

PowerShell

function Select-Object { [OutputType([string])] [CmdletBinding()] param( [parameter(ValueFromPipeline = $true, Mandatory = $true)] [string] $ProductName ) } F000 = リンゴS F001 = リンゴM F002 = リンゴL F003 = リンゴS_箱詰め F004 = リンゴM_箱詰め F005 = リンゴL_箱詰め F006 = ミカン_5個_袋詰め F007 = ミカン_20個_箱詰め

↓商品価格.ps1↓

PowerShell

function Select-Object { [OutputType([UInt32])] [CmdletBinding()] param( [parameter(ValueFromPipeline = $true, Mandatory = $true)] [UInt32] $ProductPrice ) } F000 = 150 F001 = 200 F002 = 400 F003 = 1500 F004 = 2000 F005 = 4000 F006 = 400 F007 = 1500

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

Zuishin
Zuishin

2022/05/14 09:47 編集

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

2022/05/14 10:20

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

2022/05/14 10:24

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

2022/05/14 10:45

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

2022/05/14 10:54 編集

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

2022/05/14 11:01

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

2022/05/14 11:11 編集

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

2022/05/14 11:05

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

2022/05/14 11:06

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

2022/05/14 11:41

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

2022/05/15 00:41

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

2022/05/15 01:17

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

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

PowerShell

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

関数

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