alistairb147 Ответов: 4

C# как извлечь первое слово из каждой строки текстового файла и сохранить его в массиве?


Я студент, так что извиняюсь за нубовские вопросы.

У меня есть текстовый файл со следующим форматированием:
собака - я взял свою собаку на прогулку
дверь - я открыл входную дверь своего дома
choose - вам нужно выбрать товар

Я хочу, чтобы моя программа считывала каждую строку в файле и сохраняла первое слово в массиве, а предложение, содержащее это слово, - в отдельном массиве.

Мне удалось сделать это только вручную, что не очень эффективно и делает его таким, чтобы программа не загружала предложения и слова случайным образом. Я хочу, чтобы программа загружала строки случайным образом, так как это игра и должна иметь какой-то вызов.

Что я уже пробовал:

string[] linesText = System.IO.File.ReadAllLines(@"/FILEPATH/file.txt");

string question = linesText[1];
string[] wordsText = question.Split(' ');

Console.WriteLine(wordsText[2] + wordsText[3] + wordsText[4] + wordsText[5] + "___"); 
//This is the manually constructed line for "I took my dog for a walk". I want the program to know which word to remove from the sentence and output it constructed correctly.

string userAnswer = Console.ReadLine();

if (userAnswer == wordsText[1])
{
Console.WriteLine("CORRECT!");
userScore++
}
else
{
Console.WriteLine("INCORRECT!");
}


Как это выглядит при компиляции:

Я взял свой ___ на прогулку

/Затем пользователь вводит ответ.

Я хочу, чтобы это выглядело так для каждой строки без необходимости вручную строить каждое предложение. Я хочу, чтобы программа случайным образом выбирала предложение, хранящееся в массиве linesText [], и знала ответ, который всегда является первым словом каждой строки.

4 Ответов

Рейтинг:
2

Swinkaran

int userScore = 0;

            string[] linesText = System.IO.File.ReadAllLines(@"C:\Users\srikaran.sarma\Documents\txt.txt");
            string question = linesText[1]; // Answer before '-'
            string[] wordsText = question.Split('-');   // The question part
            
            System.Console.WriteLine(wordsText[1].Replace(wordsText[0], "____ ")); //Use the Replace() function 
            
            string userAnswer = System.Console.ReadLine();

            if (userAnswer.Equals(wordsText[0].Trim()))
            {
                System.Console.WriteLine("CORRECT!");
                userScore++;
            }
            else
            {
                System.Console.WriteLine("INCORRECT!");
            }

Примечание: используйте индексы массива правильно.


Рейтинг:
2

Gerry Schmitz

Я думаю, что вам лучше использовать свою собственную "разметку"; например, избежать определенных проблем.

Я взял свою собаку на прогулку и съел хот-дог.

Я взял свою собаку на прогулку и съел хот-дог.

Я взял свой ____ на прогулку и съел хот-дог.

Разделение на "$" и вашего сайта-это #собака# (обрезать концы). #...# тоже свой замена переменной на "____".


Рейтинг:
0

MadMyche

Как насчет того, чтобы мы отказались от разделения его на пространство, а вместо этого разделили его на дефис:

// string[] wordsText = question.Split(' ');
string[] lineText = question.Split('-');
/*
given "dog - I took my dog for a walk"

lineText[0].Trim() should be "dog"
lineText[1].Trim() should be "I took my dog for a walk"


Рейтинг:
0

Maciej Los

alistairb147[^] писанное:

Console.WriteLine(wordsText[2] + wordsText[3] + wordsText[4] + wordsText[5] + "___"); 
//This is the manually constructed line for "I took my dog for a walk". I want the program to know which word to remove from the sentence and output it constructed correctly.


Если вы хотите заменить 'dog' с '___', вам нужно использовать строка.Заменять[^] метод. Видеть:

string[] sentences = {
    "dog - I took my dog for a walk",
    "door - I opened the front door of my house",
    "choose - you need to choose an item"
    };

for(int i=0; i<sentences.Length; i++)
{
    string sentence = sentences[i];
    string word = sentence.Split(new string[]{" - "}, StringSplitOptions.RemoveEmptyEntries)[0];
    sentence = sentence.Split(new string[]{" - "}, StringSplitOptions.RemoveEmptyEntries)[1].Replace(word, new string('_', word.Length));
    Console.WriteLine(sentence);
    string answer = Console.ReadLine();
    if(answer.ToLower()==word.ToLower())
        Console.WriteLine("Correct!");
    else
        Console.WriteLine("Incorrect!");
}


Результат:
I took my ___ for a walk
Correct!
I opened the front ____ of my house
Correct!
you need to ______ an item
Incorrect!