我想选择包含.txt
的文件,并将每个文本中的所有字符串拆分为数组
然后将划分的单词插入到sql数据库(word,counter)中,并按计数器计算每个文本中重复的单词,导致数据库表中未重复的单词>>
(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();
// }
}
}
答案 0 :(得分: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(' ');
}
触发SELECT查询时,3 -sql数据库无法显示阿拉伯语单词(?????)?
Sql Server
无法显示Uni Code
个字符,因为您已将表格列/字段创建为varchar
。
解决方案:如果要在触发Arabic
查询时获取SELECT
字符,则应使用{创建表格列以接受Uni Code
个字符{1}}数据类型而不是NVARCHAR
。 VARCHAR
代表N
。
第1步:将您的表格列设为National language character set
,如下所示:
NVARCHAR
第2步:在将数据插入create table sample(
[name] [nvarchar](100) NOT NULL)
列时,使用N
作为前缀。 N作为前缀表示所有后续字符都是NVARCHAR
个字符。
代码:
Uni Code
现在,如果您触发INSERT INTO sample VALUES(N'لا أتكلم العربية');
查询,您将能够看到SELECT
字符。