2013-08-07 6 views
0

У меня есть небольшое консольное приложение, над которым я работаю, и оно возвращает несколько 0 вместо фактического количества слов. В некоторых случаях я также заметил, что моя логика будет ошибочной, поскольку я считаю пробелы. Обычно это не считается последним словом в строке. Любые предложения по исправлению кода. Благодарю.Подсчет слов в строке из файла

static void Main() 
    { 
     bool fileExists = false; 

     string filePath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); 
     string file = filePath + @"\wordcount.txt"; 

     fileExists = File.Exists(file); 

     if (fileExists) 
     { 
      Console.WriteLine("{0} contains the following", file); 
      Console.WriteLine(File.ReadAllLines(file)); 

      foreach (char words in file) 
      { 
       int stringCount = 0; 
       if (words == ' ') 
       { 
        stringCount++; 
       } 
       Console.WriteLine(stringCount); 
      } 

     } 
     else 
     { 
      Console.WriteLine("The file does not exist, creating it"); 
      File.Create(file); 
     } 

     Console.ReadLine(); 
    } 

Я редактировал его так, что я проверяю содержимое вместо пути к файлу (Noob здесь делает NooB ошибки). Я все еще чувствую, что моя логика с утверждением if внутри цикла foreach плохая.

 if (fileExists) 
     { 
      Console.WriteLine("{0} contains the following", file); 
      string[] contents = File.ReadAllLines(file); 

      foreach (string words in contents) 
      { 
       int stringCount = 0; 
       if (words == " ") 
       { 
        stringCount++; 
       } 
       Console.WriteLine(stringCount); 
      } 

     } 
+0

Вы должны прочитать документацию [File.ReadAllLines] (http://msdn.microsoft.com/en-us/library/system.io.file.readalllines.aspx) (там также есть пример кода). –

+0

вы foreach против файла, который является файловым путем. – Jonesopolis

+0

Есть так много ошибок в этом коде, я не знаю, с чего начать! –

ответ

2

String.Split и File.ReadAllText являются функции вы должны смотреть на.

var count = File.ReadAllText(file).Split(' ').Count(); 
+0

Я использовал это с комбинацией того, что я уже писал, и это, казалось, делало трюк. Благодарю. – Phorden

3

Вы не читаете сам файл, вы читаете file переменную, вы задекларирован как filePath + @"\wordcount.txt";.

Вы просто выводите содержимое файла на консоль. Вы должны назначить результат от File.ReadAllLines(file) к новой переменной (типа string[]: http://msdn.microsoft.com/en-us/library/system.io.file.readalllines.aspx), а затем выполнить ее.

0

Если вы прочитаете содержимое файла для строки, вы можете использовать этот код для подсчета пробелов. Вам нужно только добавить 1 к этому счету для обработки последнего слова.

int count = strFileContents.Split(' ').Length - 1; 
0

Вы можете использовать строку разделить

if (fileExists) 
     { 
      Console.WriteLine("{0} contains the following", file); 
      Console.WriteLine(File.ReadAllLines(file)); 
      var fileContent=File.ReadAllText(); 

      stringCount=fileContent.Split(new [] {' ','\n'},StringSplitOptions.RemoveEmptyEntries).Length; 
     } 
0
if (fileExists) 
    { 
     string fileString = File.ReadAllText(file); 
     var words = fileString.Split(' '); 
     int strCount = words.Count(); 
    } 

прочитать файл в строку, разбить его пробелами, подсчитать количество элементов в массиве.

0

Я думаю, что это должно соответствовать вашему форматированию:

List<string> allWords = new List<string>(); 
foreach (string words in file) 
    { 
     allWords += words; 
    } 

int wordCount = allWords.Length(); 

Хотя, я думаю, что @AlexeiLevenkov еще лучше ...

Смежные вопросы