0

文字列ベースの変数を .csv ベースのリストと比較して、文字列が存在するかどうかを判断しようとしています。私が考慮に入れなかったのは、変数が項目リストの 1 つの部分文字列である可能性です。

以下のコードの前に、ユーザーに名と姓を入力するように求め、提供された情報を使用して、次のアクションを実行して 8 文字のユーザー名を生成し、リストと照合してそのユーザー名を確認します。利用可能であるか、すでに取得されています。

$LastName = $objTextBoxLN.text 
$LastName = (Get-Culture).textinfo.totitlecase($LastName)

$UN = $objTextBoxLN.text.Substring(0,[System.Math]::Min(7, $objTextBoxLN.text.Length)).ToLower()+$objTextBoxFN.text.Substring(0,1).ToLower()
Write-Host "Searching for Username Conflicts"
Write-Host 

IF(select-string -Path "c:\Folder_X\userlist.csv" -pattern $UN)
    {
    $UN = $objTextBoxLN.text.Substring(0,[System.Math]::Min(6, $objTextBoxLN.text.Length))+$objTextBoxFN.text.Substring(0,2)
    Write-Host "Conflict found!  Username" $UN.ToLower() "generated using 6 characters from last name plus 2 characters from first name (Option 2)" 
    Write-Host 
ELSE
    {
    Write-Host "No Conflicts Found.  Username" $UN "generated using 7 characters from last name plus 1 character from first name (Option 1)"
    Write-Host
    }

したがって、Userlist.csv にユーザー名のリストがある場合:

  • スミス
  • 白い
  • ホワイトウィ

など...

そして、エンドユーザーが「Harry Smit」と入力すると、「smith」というユーザー名が生成され、IF ステートメントは、現在のユーザー名「smithj」内のリストで「smith」を見つけ、ユーザー名を「smithhi」に更新しますが、これはユーザー名「smith」が存在しないことを確認し、元のユーザー名を返すようにしたいと考えています。

誰もが提供できる助けに感謝します。うまくいけば、簡単な解決策があります。

4

2 に答える 2

0

各行に 1 つずつあるため、正規表現の行の開始アンカーと終了アンカーを使用して完全一致を強制できます。

$UN = $objTextBoxLN.text.Substring(0,[System.Math]::Min(7, $objTextBoxLN.text.Length)).ToLower()+$objTextBoxFN.text.Substring(0,1).ToLower()

$UN = '^\s*{0}\s*$"' -f $UN
于 2016-03-04T00:09:03.737 に答える
0

クエリからより健全な出力を得ることをお勧めします。きれいなフィールド区切りを取得できる場合import-csvは、関心のある列のみを使用して実際に検査することができます。

import-csv "c:\Folder_X\userlist.csv" -delimiter ' ' -Header @('un','f','l')

un       f       l
--       -       -
"smithj" (John   Smith)
"whitew" (Walter White)
"smith"  (Harry  Smit)

本当に入力を変更できない場合...
select-string正規表現に一致させることができます。スキャンしているユーザー名を、入力のフィールド形式に一致する正規表現に変換します。

select-string -Path "c:\Folder_X\userlist.csv" -Pattern "^$UN\b"

たとえば、これは、行の先頭に固定され、単語境界がすぐ後に続くユーザー名を探します。

于 2016-03-04T02:09:55.963 に答える