C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ツリー一括表示

ワイルドカードを含んだ置換について /素人 (24/09/23(Mon) 07:06) #103322
Re[1]: ワイルドカードを含んだ置換について /ぶなっぷ (24/09/23(Mon) 10:10) #103323
  └ Re[2]: ワイルドカードを含んだ置換について /素人 (24/09/23(Mon) 13:02) #103324
    └ Re[3]: ワイルドカードを含んだ置換について /とっちゃん (24/09/23(Mon) 15:35) #103325
      └ Re[4]: ワイルドカードを含んだ置換について /素人 (24/09/23(Mon) 19:39) #103326 解決済み


親記事 / ▼[ 103323 ]
■103322 / 親階層)  ワイルドカードを含んだ置換について
□投稿者/ 素人 (1回)-(2024/09/23(Mon) 07:06:06)

分類:[C#] 

c#でワイルドカードを含んだ置換のコーディングについて教えてください。

やりたいことは以下です。

c:\users\*\xxx\bbb\ccc
↓置換
%userprofile%\xxx\aaa\bbb\ccc

文字列の先頭から、以下の*部分をワイルドカードとして、
c:\users\*\xxx\
の場合
%userprofile%\xxx\aaa\
に置換したいです。





[ □ Tree ] 返信 編集キー/

▲[ 103322 ] / ▼[ 103324 ]
■103323 / 1階層)  Re[1]: ワイルドカードを含んだ置換について
□投稿者/ ぶなっぷ (5回)-(2024/09/23(Mon) 10:10:07)
環境変数 userprofile はユーザ名を含んでいますので、ログオンユーザによって、
実際の値が異なります。

xxxが常に自身のログオンユーザであるなら、
Environment.GetEnvironmentVariable("userprofile")
で得られた値と %userprofile% を置換すればよいですが、

自身のログオンユーザでない場合、どう変換したいのか?
定義から考えないと駄目です。

[ 親 103322 / □ Tree ] 返信 編集キー/

▲[ 103323 ] / ▼[ 103325 ]
■103324 / 2階層)  Re[2]: ワイルドカードを含んだ置換について
□投稿者/ 素人 (3回)-(2024/09/23(Mon) 13:02:11)
2024/09/23(Mon) 13:06:52 編集(投稿者)
2024/09/23(Mon) 13:06:33 編集(投稿者)
2024/09/23(Mon) 13:06:25 編集(投稿者)

No103323 (ぶなっぷ さん) に返信
> 環境変数 userprofile はユーザ名を含んでいますので、ログオンユーザによって、
> 実際の値が異なります。
>
> xxxが常に自身のログオンユーザであるなら、
> Environment.GetEnvironmentVariable("userprofile")
> で得られた値と %userprofile% を置換すればよいですが、
>
> 自身のログオンユーザでない場合、どう変換したいのか?
> 定義から考えないと駄目です。
>

ご返信ありがとうございます。
質問(実現したいこと)が整理できてませんでした。すみません。

【前提】
ログオンユーザーが例えば、person1、person2といる場合、
ユーザーにより、下記のようにパスが異なります。

c:\users\person1\box\bbb\ccc
c:\users\person2\box\aaa\bbb\ccc

boxのフォルダ名はユーザー共通、位置もユーザー名フォルダ配下でユーザー共通です。
bbb配下もユーザー共通ですが、boxとbbbの間にaaaのように別フォルダが挟まって見えるユーザーがいます。

【実現したいこと】
上記前提のパスの文字列をインプットとして
どちらのユーザーも、
%userprofile%\box\aaa\bbb\ccc
のパスに変換したいです。

@c:\users\ユーザー名 を %userprofile%に変換したい
ログオンユーザーにより異なるユーザー名を*(ワイルドカード)として変換できず困っています。

Abox\bbbがあればbox\aaa\bbb\cccに変換したい


どなたかご教示いただけると助かります。




[ 親 103322 / □ Tree ] 返信 編集キー/

▲[ 103324 ] / ▼[ 103326 ]
■103325 / 3階層)  Re[3]: ワイルドカードを含んだ置換について
□投稿者/ とっちゃん (833回)-(2024/09/23(Mon) 15:35:50)
No103324 (素人 さん) に返信
> ご返信ありがとうございます。
> 質問(実現したいこと)が整理できてませんでした。すみません。
>
> 【前提】
> ログオンユーザーが例えば、person1、person2といる場合、
> ユーザーにより、下記のようにパスが異なります。
>
> c:\users\person1\box\bbb\ccc
> c:\users\person2\box\aaa\bbb\ccc
>
> boxのフォルダ名はユーザー共通、位置もユーザー名フォルダ配下でユーザー共通です。
> bbb配下もユーザー共通ですが、boxとbbbの間にaaaのように別フォルダが挟まって見えるユーザーがいます。
>

C:\Users\person1 を見てるかどうかは、Environment.GetEnvironmentVariable("userprofile") で得た値と
比較する、あるいは、そうなっているであろうということでReplaceメソッドで置き換えてしまう(一致しなければ
変わらないので問題ない)という方法もあります。


> 【実現したいこと】
> 上記前提のパスの文字列をインプットとして
> どちらのユーザーも、
> %userprofile%\box\aaa\bbb\ccc
> のパスに変換したいです。
>

person1 は、C:\Users\person2\box\... を選択することがあり得るのでしょうか?
また、person1 が選択したという情報は、person2と共有されるのでしょうか?

そのあたりが質問者の思っている部分が伝わっていないのだと思います。

もし、person1 が選択しているであろうフォルダは C:\Users\person1\... となっており
person2は、C:\Users\person2\... となっていることが前提条件として成り立つのであれば
そのままReplaceメソッドで置き換えてしまえばよいと思いますが?

> @c:\users\ユーザー名 を %userprofile%に変換したい
> ログオンユーザーにより異なるユーザー名を*(ワイルドカード)として変換できず困っています。
>
> Abox\bbbがあればbox\aaa\bbb\cccに変換したい
>
文字列の入れ替えは、string.Replace メソッドで変換できます。

@の場合は、変換元が Environment.GetEnvironmentVariable("USERPROFILE") でとってきた値
変換後の値が "%USERPROFILE%" になります。

Aの場合は、変換元が "box\\bbb" 変換後の値が "box\\aaa\\bbb\\ccc" になります。

Replace メソッドには大文字小文字を区別しないパターンもあるのでどう使うかは状況を
考慮して使い分けしてください。


・Environment.GetEnvironmentVariable メソッド
https://learn.microsoft.com/ja-jp/dotnet/api/system.environment.getenvironmentvariable?WT.mc_id=DT-MVP-32182&view=net-8.0

・string.Replace メソッド
https://learn.microsoft.com/ja-jp/dotnet/api/system.string.replace?WT.mc_id=DT-MVP-32182&view=net-8.0



おまけ

%USERPROFILE%\\box\\aaa\\bbb\\ccc を実際のパスに変換するためのメソッド

・Environment.ExpandEnvironmentVariables メソッド
https://learn.microsoft.com/ja-jp/dotnet/api/system.environment.expandenvironmentvariables?WT.mc_id=DT-MVP-32182&view=net-8.0


[ 親 103322 / □ Tree ] 返信 編集キー/

▲[ 103325 ] / 返信無し
■103326 / 4階層)  Re[4]: ワイルドカードを含んだ置換について
□投稿者/ 素人 (4回)-(2024/09/23(Mon) 19:39:49)
No103325 (とっちゃん さん) に返信

ありがとうございました。
期待していた動作を実装できました。

Environment.GetEnvironmentVariable("userprofile")で
得られた文字列と一致する部分をReplaceメソッドで%userprofile%で置換したあと、
%userprofile%\\box\\bbbをReplaceメソッドで
%userprofile%\\box\\aaa\\bbbに置換するようにしました。

本件クローズとさせていただきます。
解決済み
[ 親 103322 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -