-1

外部のtxtファイルからデータを読み取るために必要なWebサイトがあります..そのファイルをApp_dataフォルダーに入れ、このコードを使用してそのファイルからデータを読み取りました

TXTファイルには3つのテキストが含まれています。

   protected void logInButton_Click(object sender, EventArgs e)
{
    string usernameListString = File.ReadAllText(Server.MapPath("~") + "/App_Data/usernameFile.txt");

    string[] userAray = usernameListString.Split(' ');
    bool usernameExists = false;
    for (int i = 0; i < userAray.Length; i++)
    {
        if (usernameTextBox.Text == userAray[i])
        {
            welcomeLabel.Text = "Welcome" + userAray[i];
        }

        if (usernameTextBox.Text != userAray[i])
        {
            welcomeLabel.Text = "unknown user";
        }

        usernameExists = true;

    }

forの各アイテムを通過するループを書きたいですuserArray。ループの終わりにusernameExists、ユーザー名テキストボックスに入力されたユーザー名が配列に存在する場合にのみTRUEに設定します。テキストボックスにそれらの名前の1を入力したときにコードしましたか?名前が存在しない場合は、ウェルカムラベルを与えますか?およびその逆!

上記のコードに何か問題がありますか?

4

5 に答える 5

1

これを試して

protected void logInButton_Click(object sender, EventArgs e)
{
string usernameListString = File.ReadAllText(Server.MapPath("~") 
      + "/App_Data/usernameFile.txt");

string[] userAray = usernameListString.Split(' ');
bool usernameExists = false;
for (int  i = 0; i < userAray.Length; i++)
{
    if (userAray[i]==usernameTextBox.Text)
    {
        welcomeLabel.Text = "Welcome" + userAray[i];
        usernameExists = true;
    }
    else
    {
        welcomeLabel.Text = "unknown user";
    }        
}
于 2013-10-03T04:37:40.573 に答える
1

これにはLinqを使用できます:

usernameExists = userArray.Any(x => x == usernameTextBox.Text);

また、あなたの例ではuserAray、文字列配列として宣言していますが、それを単一の文字列のように使用しています。

于 2013-10-03T04:20:20.137 に答える
1

これはうまくいきます:

bool usernameExists = false;
for (int  i = 0; i < userAray.Length; i++)
{
    if (userAray[i] == "kevin123")
    {
        usernameExists = true;
        break; // stop checking more values
    }
}

またはもっと簡単に:

bool usernameExists = userAray.Contains("kevin123");

または、配列にいくつかの値のいずれかが含まれているかどうかを確認したい場合:

string[] userNamesToSearchFor = new[] { "kevin123", "INFO102lec", "INFO102k" };
bool usernameExists = userAray.Intersect(userNamesToSearchFor).Any();

更新に関して、問題は、配列をループしているときにラベルを更新しようとしていることです。最初にユーザー名が配列 ( usernameExists)に存在するかどうかを判断し、次に結果を示すラベルを設定する必要があります。次に例を示します。

for (int  i = 0; i < userAray.Length; i++)
{
    if (userAray[i] == usernameTextBox.Text)
    {
        usernameExists = true;
        break; // stop checking more values
    }
}

if (usernameExists)
{
    welcomeLabel.Text = "Welcome " + usernameTextBox.Text;
}
else 
{
    welcomeLabel.Text = "unknown user";
}
于 2013-10-03T04:21:03.957 に答える
0

==問題は、ファイルからすべての行を読み取るために ReadAllLinesが必要であり、試してみることです

string[] userAray = File.ReadAllLines();
if (userAray[i] == "kevin123" || userAray[i] == "INFO102lec" || userAray[i] == "INFO102k") 
{
   usernameExists = true;
   break; 
}

=割り当てにはシングルが使用されます。==比較用です

于 2013-10-03T04:20:11.780 に答える
0

試す:

    bool usernameExists = false;
    for (int  i = 0; i < userAray.Length; i++)
    {
        if (userAray == "kevin123")
        {
          usernameExists =true;
        }
    }
于 2013-10-03T04:23:41.710 に答える