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

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

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

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

Q&A

解決済

1回答

1054閲覧

PowerShellでソートする際に半角全角を区別して、半角から順にソートされるようにしたい。

ericasimons

総合スコア1

PowerShell

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

0グッド

0クリップ

投稿2023/06/07 06:11

編集2023/06/07 07:48

配列に半角文字から始まる文字列と全角から始まる文字列が複数はいっている。それをソートして出力する際に半角文字から始まる文字列でソートされたものが表示されたあと、全角文字から始まる文字列でソートされたものが表示されるようにするにはどのようにすればよろしいでしょうか。

例 以下のものを試しましたが、想定した動きになりませんでした。
$strings = "AAA","aaa","AAA","BBB","bbb","1","2","1","2"
$sortedStrings = $strings | Sort-Object -CaseSensitive
$sortedStrings
上記、実行すると以下のように全角も半角と同じ文字として判定されソートされる。
1      ※半角
1      ※全角
2      ※半角
2      ※全角
aaa      ※半角
AAA      ※半角
AAA      ※全角
bbb      ※半角
BBB      ※半角
これを、以下のように半角と全角を区別してソートされるようにしたい。
1      ※半角
2      ※半角
aaa     ※半角
AAA     ※半角
bbb     ※半角
BBB     ※半角
1      ※全角
2      ※全角
AAA    ※全角

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

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

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

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

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

kikukiku

2023/06/07 06:48

下記で動作するみたいです。 先頭の1文字を取り出して、Shift_JISを指定してバイト変換し、 その結果が1バイトでなかったら全角と判定しています。 $sortedStrings = $strings | sort -Property {([System.Text.Encoding]::GetEncoding("Shift_JIS").GetByteCount($_.Substring(0, 1)) -ne 1), $_}
kikukiku

2023/06/07 06:52

大文字小文字の判定も必要なら下記です。 $sortedStrings = $strings | sort -Property {([System.Text.Encoding]::GetEncoding("Shift_JIS").GetByteCount($_.Substring(0, 1)) -ne 1), $_} -CaseSensitive
ericasimons

2023/06/07 07:39

早速の回答ありがとうございます。 想定していたものになりました。本当にありがとうございます。 オプション指定等で何とかならないかばかり探していたので、変換等の処理を組み合わせるというテクニックを教えていただき、大変勉強になりました。
kikukiku

2023/06/07 07:47

powershellはあまり使ったことはないのですが、 やってみたらできちゃったので回答してみました。 回答欄に記入して自己解決にしちゃってください。
melian

2023/06/07 09:07

解決済みですが、別解として以下の様にしてもよいかと思います。 $sortedStrings = $strings | Sort-Object -Property { ($_[0] -gt 127), $_ } -CaseSensitive
guest

回答1

0

自己解決

kikukikuさんの回答により解決しました。

>大文字小文字の判定も必要なら下記です。
>$sortedStrings = $strings | sort -Property {([System.Text.Encoding]::GetEncoding("Shift_JIS").GetByteCount($.Substring(0, 1)) -ne 1), $} -CaseSensitive

投稿2023/06/07 07:50

ericasimons

総合スコア1

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問