2017-03-26 43 views
-2

如何阅读从startswith *C#删除字母和数字

我的文本文件有15000个lines.Lines与*字符的问题,并线之下是与该问题有关条款文本文件随机行。

这是文件的一个组成部分:

*Planete i njihovi sateliti 
Zemlja=Mesec 
Mars=Fobos 
Jupiter=Io 
Saturn=Titan 
Uran=Titania 
Neptun=Triton 
Pluton=Haron 
Merkur=Nema satelit 

*Francuski gradovi 
Bordeaux=Bordo 
Auxerre=Okser 
Toulouse=Tuluz 
Nantes=Nant 
Marseille=Marselj 
Dijon=Dižon 
Limoges=Limož 
Chateauroux=Šatero 

http://pastebin.com/u8q4rimX

+0

我不确定我是否正确理解你想要什么,但也许你可以将所有以*开头的行存储在列表结构中,然后生成一个随机数来访问该列表中的项目。 –

+0

如何做到这一点? – Pavle

+0

你到目前为止尝试过什么?你是否有一些数据结构,你想要存储的问题? –

回答

1

阅读所有线路开始*到一个列表,然后得到一个随机指数。
并在开始摆脱*

var questions = 
    File.ReadLines(filePath) 
     .Where(line => line.StartsWith("*")).ToList(); 

var rng = new Random(); 
var myRandomQuestion = questions[rng.Next(questions.Count)].Substring(1); 

更新

如果你需要下面还有线,那么上面将无法正常工作。
我首先建议你创建某种结构。
例如:

public class QuestionAndTerms 
{ 
    public string Question {get; set;} 
    public List<string> Terms {get; set;} 
} 

然后,循环通过文件并填充List<QuestionAndTerms>

var question = null; 
foreach (string line in File.ReadLines(filePath)) 
{ 
    if (line.StartsWith("*")) 
    { 
     if (question!= null) 
     { 
      // We have a previous question 
      questionList.Add(question); 
     } 

     question = new QuestionAndTerms(); 
     question.Question = line.Substring(1); 
    } 
    if (!string.IsNullOrWhiteSpace(line)) 
    { 
     question.Terms.Add(line); 
    } 
} 

或者循环通过与StremReader

using (var reader = File.OpenText(filePath)) 
{ 
    // loop and logic here 

} 

以上所有的只是给一个方向,它既不测试,也不完整。

+0

工作很棒! – Pavle

+0

你能告诉我如何读取myRandomQuestion下面的行 – Pavle

+0

每个问题有8行与他有关吗?如何阅读下面的随机问题 – Pavle

0

首先,您必须决定如何将问题和响应表示为数据结构。我建议代表有足够的类的问题和答案(我使用VS 2017年/ C#7.0的语法):

public class Choice 
{ 
    public Choice (string choiceText, string answer) 
    { 
     ChoiceText = choiceText; 
     Answer = answer; 
    } 

    public string ChoiceText { get; } 
    public string Answer { get; } 
} 

public class Question 
{ 
    public Question (string questionText) 
    { 
     QuestionText = questionText; 
    } 

    public string QuestionText { get; } 
    public List<Choice> Choices { get; } = new List<Choice>(); 
} 

现在你可以开始阅读文件和提出的问题和答案到结构

var questions = new List<Question>(); 
var Question lastQuestion = null; 
foreach (string line in File.ReadLines(path)) { 
    if (line.StartsWith("*")) { 
     // We have a new question. Create a question object and add it to the list. 
     lastQuestion = new Question(line.Substring(1)); 
     questions.Add(lastQuestion); 
    } else if (lastQuestion != null) { 
     // We have a term related to the last question. Add it to the last question. 
     // Split the line at the equal sign. 
     string[] parts = line.Split("=", StringSplitOptions.RemoveEmptyEntries); 
     if (parts.Length > 0) { 
      // We have at least one part that is not empty. Let’s assume it’s the part before 
      // the "=". If we have a second part, insert it as well, otherwise insert null. 
      var choice = new Choice(parts[0], parts.Length > 1 ? parts[1] : null); 
      lastQuestion.Add(choice); 
     } 
    } 
} 

但是,我注意到您的示例文件包含2个不同类型的问题。有些人在等号后有答案,而另一些人则将选择和答复分开。所以,你必须扩展解决方案来考虑这一点。

你的问题非常不明确,所以很难给你一个合适的答案。下一次,提前想一想,并提出更具体和更精确的问题。另外,在Stack Overflow上,我们更倾向于提供迄今为止尝试过的代码示例。