VB文件处理
各位大侠,有一个文件命名为aa.csv,其中的内容如下:学号,姓名,数学成绩,语文成绩,英语成绩
21,李四,98,23,12
12,王网,23,12,56
现在要将上面数据处理成如下:
学号,姓,名,成绩总分(数学+语文+英语),名次
21,李,四,133,1
12,王,网,91,2
保存在bb.csv中。请赐教呀,坐等 --------------------编程问答-------------------- 先将每一行数据读取,成绩相加,再排序,姓名再分开就麻烦了,不好判断复姓,为何姓名分开? --------------------编程问答-------------------- csv可以直接通过字符串处理,像楼上说的分行读取就行了,但姓名分开会有点麻烦 --------------------编程问答-------------------- 处理完了写回bb.csv需要自己加上','吗
--------------------编程问答-------------------- 输出时要加上',' --------------------编程问答--------------------
--------------------编程问答-------------------- 如果数据写到数据库里,一条select语句就可搞定,我这个方法是笨办法, --------------------编程问答-------------------- 楼上大神,有木有纯VB,不用调用VB.net
Dim bd As New BindingSource
bd.DataSource = getDB()
DataGridView1.DataSource = bd‘绑定数据源
bd.Sort = "成绩总分 DESC" ’降序
addnum(DataGridView1.RowCount)
DataSave(DataGridView1)
'你再将DataGridView1里的数据生成csv
Public Function DataSave(ByVal dgv As DataGridView)
Dim fs As New IO.FileStream("bb.csv", IO.FileMode.Create)
Dim sw As New IO.StreamWriter(fs, System.Text.Encoding.Unicode)
Dim title As String = ""
Dim i As Integer
For i = 0 To dgv.ColumnCount - 1
title = dgv.Columns(i).HeaderText
sw.Write(title)
If i <> dgv.ColumnCount - 1 Then
sw.Write(",")
End If
Next
sw.WriteLine("")
'写内容
Dim x As Integer
Dim y As Integer
For x = 0 To dgv.RowCount - 1
For y = 0 To dgv.ColumnCount - 1
If dgv.Rows(x).Cells(y).Value Is DBNull.Value Then
sw.Write("")
Else
sw.Write(dgv.Rows(x).Cells(y).Value)
End If
If y <> dgv.ColumnCount - 1 Then
sw.Write(",")
End If
Next
sw.WriteLine("")
sw.Flush()
Next
fs.Close()
End Function
Sub addnum(ByVal rn As Integer)'增加序号,就是排名
Dim i As Integer
For i = 1 To rn - 1
DataGridView1.Rows(i - 1).Cells(3).Value = i
Next
DataGridView1.Refresh()
End Sub
Public Function getDB() As DataTable‘读取数据放表中
Dim dt = New DataTable()
dt.Columns.Add("学号")
dt.Columns.Add("姓名")
dt.Columns.Add("成绩总分", GetType(Integer))
dt.Columns.Add("名次")
Using r As IO.StreamReader = New IO.StreamReader("test.csv", System.Text.Encoding.Default)
Dim line As String
Dim s As String()
Dim score As Integer
line = r.ReadLine
Do While (Not line Is Nothing)
s = line.Split(",")
If IsNumeric(s(0)) = True Then
score = Convert.ToInt16(s(2)) + Convert.ToInt16(s(3)) + Convert.ToInt16(s(4))
dt.Rows.Add(s(0).ToString(), s(1).ToString().ToString(), score)
End If
line = r.ReadLine
Loop
r.Close()
r.Dispose()
End Using
Return dt
End Function
补充:.NET技术 , VB.NET