2013-03-21 6 views
0

Мой вопрос о получении данных из текстового файла. Это описание проблемы:Извлечение данных из текстового файла

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

Рассмотрите ситуацию, когда слушатель заглядывает в файл и видит, что он содержит 10 строк, слушатель берет эти строки и сохраняет их. Затем, после дельта-времени (например, 1 секунда), он снова заглядывает и видит 93 строки. Это сохраняет 83, которые также были незарегистрированы. Теперь, когда слушатель заглядывает в третий раз, он видит 3 строки. Это, очевидно, сохраняет их, но заметьте, что есть промах 7 строк (с индексом 94-100), которые не были записаны слушателем.

Похоже, что подглядывание при постоянной дельте не гарантирует, что промах не случится.

Как вы можете предложить лучший способ достичь этого требования?

+0

попробуйте узел js с вами C# веб-приложение – 1Mayur

+0

«FileSystemWatcher» может сделать трюк. – jordanhill123

ответ

0

Это код, чтобы взять данные построчно из файла и сохранить его в базу данных >>

string line; 
      string[] subLine; 
      DialogResult result = openFileDialog1.ShowDialog(); 
      try 
      { 
       if (result == DialogResult.OK) 
       { 
        string file = openFileDialog1.FileName; 
        StreamReader inputData = new StreamReader(file); 
        const int maxRecords = 500; 
        int actualRecords = 0; 
        while ((line = inputData.ReadLine()) != null) 
        { 
         subLine = line.Split(','); 

         try 
         { 


          string unknown = "unknown Fileld"; 
          con.Open(); 
          // int j=subLine.Length; 
          //for(int i=0;i<subLine.Length;i++) 
          if (actualRecords < maxRecords) 
          { 
           int i = 0; 
           //int j=subLine.Length; 
           //int index=subLine.Length-j; 

           // SQL= "insert into tradeFile values('" + ID + "','" + subLine[i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + unknown + "')"; 

           cmd = new SqlCommand("insert into tradeFile values('" + subLine[i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + unknown + "')", con); 
           // cmd = new OleDbCommand("insert into tradeFile values('" + subLine[i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + unknown + "')", con); 
           cmd.ExecuteNonQuery(); 
           actualRecords++; 
           // j--; 

          } 
          else 
          { 
           int i = 0; 
           //int j=subLine.Length; 
           //int index=subLine.Length-j; 
           cmd = new SqlCommand("insert into tradeFile values('" + subLine[i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + unknown + "')", con); 
           //cmd = new OleDbCommand("insert into tradeFile values('" + subLine[i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + unknown + "')", con); 
           cmd.ExecuteNonQuery(); 
           actualRecords = 0; 
          } 





         } 
         catch (Exception ex) 
         { 
          MessageBox.Show(ex.Message); 
         } 
         finally 
         { 
          con.Close(); 
         } 
         //counter++; 
        } 
        inputData.Close(); 
       } 
      } 

      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 

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

+0

привет спасибо за ответ. Обратите внимание, что это не относится к проблеме. I intreduced купить спасибо в любом случае .. –

0

Вы могли бы провести линии в какой-либо форме коллекции, такие как List<string> и проверка List1.Add(line) против емкости сбора (100, например) используя оператор while или if, while(count < capactity)

Если у вас есть доступ к файлу, который можно читать и писать, вы можете удалить строки после добавления их в коллекцию.

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