2013-11-21 3 views
-1

В рамках выполнения задания -Получить количество строк в файле и добавить первые 40 символов

  1. Пользователь выбирает расширение файла (.txt, .bat или .xyz)
  2. список файлов из папки с этим расширением отображается
  3. Затем пользователь выбирает файл из списка и отображает первые 40 символов каждой из его первых четырех строк (или столько строк, сколько присутствует, если в строке записано менее четырех строк файл). Если в файле осталось больше строк, выведите строку: «xx больше строк не отображается» (замените xx правильным номером).

Я, похоже, не могу обернуть голову вокруг номера 3. Любую помощь или указатели очень ценят.

namespace unit9Assignment 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 

      //add the extensions to the c box. 
      comboBox1.Items.Add(".txt"); 
      comboBox1.Items.Add(".xyz"); 
      comboBox1.Items.Add(".bat"); 

      //make .txt the default selection 
      comboBox1.SelectedItem = ".txt"; 
      tabControl1.SelectedIndexChanged += tabControl1_SelectedIndexChanged; 
     } 

     /******Tab Click Event********/ 
     private void tabControl1_SelectedIndexChanged(Object sender, EventArgs e) 
     { 
      switch ((sender as TabControl).SelectedIndex) 
      { 
       case 0: 
        break; 
       case 1: 
        fileName(comboBox1.Text); 
        break; 
       case 2: 
        fileContent(Files.SelectedItem.ToString()); 
        break; 
      } 
     } 
     /******Get Files Based on Selection*******/ 

     public void fileName(string fileExt) 
     { 
      List<string> listOfFiles = new List<string>(); 
      string[] fileExtArray = Directory.GetFiles(@"C:\Users\Public", "*" + fileExt); 
      foreach (string fileExtFile in fileExtArray) 
      { 
       listOfFiles.Add(fileExtFile); 
      } 
      Files.DataSource = listOfFiles; 
     } 

     /******Display 4 Lines @ 40 Characters Per Line*********/ 

     public void fileContent(string fileName) 
     { 
      int numberOfLines = File.ReadLines(@fileName).Count(), 
      remainingLines = numberOfLines - 4; 
      //THIS PRINTS OUT 4 LINES @ 40 CHARACTERS PER LINE IF A FILE HAS LESS THAN 5 LINES 
      if (numberOfLines < 5) 
      { 
       foreach (string line in File.ReadLines(fileName)) 
       { 
        richTextBox1.AppendText(line.Substring(0, 40) + Environment.NewLine); 
        Console.WriteLine(line.Substring(0, 40)); 
       } 
      } 

      // NO CLUE WHAT TO DO 
      else 
      { 

      } 
     } 
    } 
} 
+0

Почему голос? –

+1

Я didnt (и не хотел) проголосовать за это, но некоторые из этих проблем очень распространены, и простой поиск в Google будет иметь ответы. Надеюсь, мой ответ поможет вам! – paqogomez

+0

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

ответ

1

Вместо того, чтобы проверять количество строк в файле, почему бы вам не пойти дальше и не начать печать, а остановиться после 4 строк? Что-то вроде этого:

StreamReader fileIn = new StreamReader(fileName); 
for(int i=0; i<4 && !fileIn.EndOfStream; ++i) 
{ 
    string line = fileIn.ReadLine(); 
    if(line.Length > 40) 
     richTextBox1.AppendText(line.Substring(0,40) + Environment.NewLine); 
    else 
     richTextBox1.AppendText(line + Environment.NewLine); 
} 
int j; 
for(j=0; !fileIn.EndOfStream; ++j) 
    fileIn.ReadLine(); 
if(j>0) 
    richTextBox1.AppendText(j.ToString() + " more lines are not shown."; 
fileIn.Close(); 

... Чтобы уточнить, это будет весь ваш метод fileContent. На самом деле вам не нужно знать количество строк в файле. Конечно, этот метод не будет работать, если у вас больше строк в файле, чем может содержать переменная int, но я предполагаю, что вы не работаете с такими длинными файлами.

+0

Спасибо за помощь Кевин Т. Я предполагаю, что в будущем я должен сделать шаг назад и подумать о логике. –

+0

Да, это было бы целесообразно. Компьютерная логика отличается от человеческой логики - она ​​является последовательной, а не «коллективной», из-за отсутствия лучшего термина. Другими словами, вы проходите один шаг за раз (разделить и победить, возможно?), А не смотреть на общую картину и кусать куски, которые вы хотите. Сила этого заключается в том, что последовательная логика должна работать для каждого возможного случая, а «коллективный» метод изменяется для каждого случая. Итак, вам нужно начать думать, как компьютер. –

1

Как об этом:

public void fileContent(string fileName) 
{ 
    var lines = File.ReadLines(@fileName); 
    foreach (string line in lines.Take(4)) 
    { 
     richTextBox1.AppendText(line.Substring(0, 40) + Environment.NewLine); 
    } 

    var remaining = lines.Count() - 4; 
    if (remaining > 0) 
     richTextBox1.AppendText(remaining + " more line(s) are not shown."); 
} 

документация Take() является here.

+0

Согласен, но ничего не говорит «Я изучаю C#», как запрос linq. –

+0

Hrm, good point ... – CSJ

+1

Это не удастся, если строка содержит менее 40 символов. –

1

Ответы на домашние задания - это плохая практика. Вместо этого здесь некоторые указатели, чтобы помочь вам обернуть вокруг головы вашей проблемы:

//read a file 
var lines = File.ReadLines("myfile"); 
//get the first 4 lines of your file 
var first4 = lines.Take(4); 
//get the first 40 characters of the first line of your file 
var first40Chars = lines.FirstOrDefault().Take(40); 
//get the remaining number of lines 
var remainingCount = lines.Count() - 4; 

Подтягивание диалоговое окно, чтобы показать файлы довольно легко также. WinForms FileDialog может вам помочь.

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