2013-12-04 4 views
-1

Я хочу выбрать файл, содержащий .txt, и разделить все строки в каждом тексте на массив , затем вставить разделенные слова в базу данных sql (слово, счетчик) и посчитать повторяющиеся слова в каждом тексте счетчик, который приводит к неповторяющимся словам в таблицах базы данных >>Разделить текст и вставить слова в базу данных sql

(1) неверный код, который я нашел несколько ошибок в моем коде >> (я хочу, чтобы повторное повторение слова одновременно вычислялось, сколько раз повторялось слово в базах данных, используя счетчик.) (2) - мой код имеет статический путь (всего один текст), но я хочу, чтобы пользователь выбирал свой файл, который он хочет разбить. (Просмотр .. кнопка) базы данных (3) SQL не может показать арабские слова (?????)

namespace lib123 
{ 
    public partial class Form1 : Form 
    { 
     SqlConnection sqlConn; 
     SqlCommand sqlComm; 
     SqlDataAdapter sqlAdptr; 

     public Form1() 
     { 
      InitializeComponent(); 
      sqlConn = new SqlConnection(); 
      sqlComm = new SqlCommand(); 
      sqlAdptr = new SqlDataAdapter(); 
      sqlComm.Connection = sqlConn; 
      sqlComm.CommandType = CommandType.Text; 
      sqlConn.ConnectionString = "Data Source=007-PC\\SQLEXPRESS ;Initial Catalog= Email_DB;Integrated Security =True "; 

     } 
     private void Form1_Load(object sender, EventArgs e) 
     { 
      FillGrid();    
     } 
     private void button1_Click(object sender, EventArgs e) 
     {    
      if (sqlConn.State != ConnectionState.Open) 
       sqlConn.Open(); 

      // sqlComm = sqlConn.CreateCommand(); 

      StreamReader streamReader = new StreamReader(@"C:\Users\007\Desktop\spam-email\spamenglish.txt"); //get the file 
      string stringWithMultipleSpaces = streamReader.ReadToEnd(); //load file to string 
      streamReader.Close(); 

      Regex r = new Regex(" +"); //specify delimiter (spaces) 
      string[] words = r.Split(stringWithMultipleSpaces); //(convert string to array of words) 

      int c = 1; 
      string strQry = "select ISNULL(max(id),0) as id from word_tb "; 
      sqlComm.CommandText = strQry; 

      int LastID = int.Parse(sqlComm.ExecuteScalar().ToString()); 
      string x ; 
      String st = null; 

      for (int i = 0; i < words.Length; i++) 
      { 
       string y = words[i]; 
       for (int j = 0; j <LastID; j++) 
       { 
       x = "select word from word_tb where id = j"; 
       sqlComm.CommandText = x ; 
        if (x.Equals(y)) 
        { 
         c = c + 1; 
         string sql = "INSERT INTO word_tb (count) VALUES ('" + c + "') where id = i"; 
         sqlComm.CommandText = sql; 

        } 
        else 
        { 
         LastID = LastID + 1; 
         st += "INSERT INTO word_tb(id, word,count) VALUES('" + LastID + "', '" + words[i].ToString() + "','" + c + "');"; 

         //st += "INSERT INTO word_tb(word) VALUES('" + words[i].ToString() + "');"; 

        } 
       } 
      } 
      sqlComm.CommandType = CommandType.Text; 
      sqlComm.CommandText = st; 
      sqlComm.ExecuteNonQuery(); 
      FillGrid(); 
     } 
     private void FillGrid() 
     { 
      DataTable tbl = new DataTable(); 
      string strQry = "select * from word_tb ";    
      sqlComm.CommandText = strQry; 
      sqlAdptr.SelectCommand = sqlComm; 
      sqlAdptr.Fill (tbl) ; 
      dataGridView1.DataSource = tbl; 
     } 

     private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) 
     { 
     } 
     //private void btnDelete_Click(object sender, EventArgs e) 
     //{ 
     // string str = "DELETE FROM word_tb"; 
     // sqlComm.CommandType = CommandType.Text; 
     // sqlComm.CommandText = str; 
     // sqlComm.ExecuteNonQuery(); 

     // dataGridView1.Rows.Clear(); 


     //   } 
    } 
} 
+1

Хорошо, так в чем ваш вопрос? –

+0

Неверный код с кодом 1 Я нашел несколько ошибок в моем коде >>>> (2) - мой код имеет статический путь (всего один текст), но я хочу, чтобы пользователь выбирал его файл, который он хочет разделить. (browse .. button) <<<< (3) База данных -sql не могла показать арабские слова –

ответ

0

1-счетчик неверный код я нашел несколько ошибок в моем коде?

вы можете использовать ниже код, чтобы разделить файл Text в words на основе space как delimiter.

Код:

String strAllData = System.IO.File.ReadAllText(@"C:\Users\007\Desktop\spam-email\spamenglish.txt"); 
String[] words = strAllData.Split(' '); 

2- мой код имеет статический путь (только один текст), но я хочу пользователю выбрать его файл, который он хочет разделить. (просмотреть кнопку)?

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

Код:

 OpenFileDialog fileDialog = new OpenFileDialog(); 
     if (fileDialog.ShowDialog() == DialogResult.OK) 
     { 
      String strAllData = System.IO.File.ReadAllText(fileDialog.FileName); 
      String[] words = strAllData.Split(' '); 
     } 

3 -SQL база данных не может показать арабские слова (?????)?

Sql Server не может показать Uni Code символ, когда вы запускаете запрос на выборку, потому что вы создали свои столбцы таблицы/feilds в varchar.

Решение: если вы хотите получить Arabic символ, когда вы огнь SELECT запроса вы должны создать свои столбцы таблицы, чтобы принять Uni Code символов с помощью NVARCHAR типа данных вместо VARCHAR. N означает National language character set.

Шаг1: создавать столбцы таблицы, как NVARCHAR, как показано ниже:

create table sample(
[name] [nvarchar](100) NOT NULL) 

Шаг 2: Использование N в качестве префикса при вставке данных в NVARCHAR столбцов. N как префикс сообщает, что все следующие символы: Uni Code символов.

Код:

INSERT INTO sample VALUES(N'لا أتكلم العربية'); 

Теперь, если вы огонь SELECT запроса вы сможете увидеть Arabic символов.

+0

первая проблема (1), что я хочу предотвратить повторение слова одновременно, подсчитав, сколько раз повторялось слово в базах данных , используя счетчик. –

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