vb.net io 操作问题

tangailingling 2009-05-27 02:10:23
问题如下:
先有一文本文档 a.txt
内容如下:
GMCC,11,11
GMCC,22,22
GMCC,33,33
AMCC,11,11
AMCC,33,33
.........
........
如此类推

用一个DATAGIRD显示文件内容,然后我选中其中的一条修改 然后保存 还有添加功能 小弟对IO操作还不熟悉 项目突然出现问题了 万分感激啊 !!!!
...全文
147 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
HAVENT 2009-05-27
  • 打赏
  • 举报
回复
使用 System.IO.StreamReader 进行文件流的读取,用System.IO.StreamWriter 进行文件的存储

采用readline的方式一行一行读取,定位记录
用Writeline一行一行的写入记录

这个都比较简单,根据楼主的意思可能需要一个单独的转换方法,将序列化的txt文件记录转换为DataTable对象

这个转换方法也很简单,无非就是独立创建一个DataTable对象,将读取的readline字符串分解为一条DataRow

存储的时候反向写入到TXT文本文件即可,不过这种方式效率是就有点差了,每次保存等于是重写了一次TXT文件
DengXingJie 2009-05-27
  • 打赏
  • 举报
回复
完整代码

Imports System
Imports System.Data
Imports System.Data.OleDb

Imports System.IO

Public Class Form1

Dim MyDataSet As DataSet = New DataSet()
Dim Cn As New OleDb.OleDbConnection
Dim MyDataAdapterSysSet As OleDbDataAdapter


Private Sub btnRead_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRead.Click
LoadData()
End Sub


Private Sub btnWrite_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnWrite.Click
Dim w As StreamWriter
w = File.CreateText(Cn.DataSource & "\test.txt")

Dim nCols As Integer
Dim nRows As Integer
Dim i As Integer, j As Integer
Dim strLine As String

nRows = DataGridView1.RowCount
nCols = DataGridView1.ColumnCount

strLine = DataGridView1.Columns(0).Name
For j = 1 To nCols - 1
strLine = strLine & getDelimited() & DataGridView1.Columns(j).Name
Next
w.WriteLine(strLine)

For i = 0 To nRows - 2
strLine = DataGridView1.Rows(i).Cells(0).Value.ToString
For j = 1 To nCols - 1
strLine = strLine & getDelimited() & DataGridView1.Rows(i).Cells(j).Value.ToString
Next
w.WriteLine(strLine)
Next
w.Close()

MsgBox("OK")

End Sub

Private Sub LoadData()
If Cn.State = ConnectionState.Open Then
Cn.Close()
End If

Cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\VS\VS2008\ODBCTextFile\TextFile\;Extended Properties='text;HDR=Yes;FMT=Delimited';"
Cn.Open()

Dim SqlStr As String
SqlStr = "select * from test.txt"

MyDataSet.Clear()
DataGridView1.DataSource = Nothing
MyDataAdapterSysSet = New OleDbDataAdapter(SqlStr, Cn)
MyDataAdapterSysSet.SelectCommand.CommandText = SqlStr
MyDataAdapterSysSet.Fill(MyDataSet, "tabText")
DataGridView1.DataSource = MyDataSet.Tables("tabText")
End Sub

Private Function getDelimited() As String
Dim key As Microsoft.Win32.RegistryKey
key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Jet\4.0\Engines\Text")
Dim value As String = CType(key.GetValue("Format"), String)
If value = "TabDelimited" Then
getDelimited = vbTab
Else
getDelimited = Replace(Replace(value, "Delimited(", ""), ")", "")
End If
End Function
End Class

DengXingJie 2009-05-27
  • 打赏
  • 举报
回复
楼主要的是VB.NET

Imports System
Imports System.Data
Imports System.Data.OleDb

Public Class Form1

Dim MyDataSet As DataSet = New DataSet()
Dim Cn As New OleDb.OleDbConnection
Dim MyDataAdapterSysSet As OleDbDataAdapter


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If Cn.State = ConnectionState.Open Then
Cn.Close()
End If

Cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\VS\VS2008\ODBCTextFile\TextFile\;Extended Properties='text;HDR=Yes;FMT=Delimited';"
Cn.Open()

Dim SqlStr As String
SqlStr = "select * from test.txt"

MyDataAdapterSysSet = New OleDbDataAdapter(SqlStr, Cn)
MyDataAdapterSysSet.SelectCommand.CommandText = SqlStr
MyDataAdapterSysSet.Fill(MyDataSet, "tabText") '此名可任取
DataGridView1.DataSource = MyDataSet.Tables("tabText")

End Sub
End Class

DengXingJie 2009-05-27
  • 打赏
  • 举报
回复
先说读取:

Option Explicit

Dim Cn As New ADODB.Connection
Dim Rst As New ADODB.Recordset

'The delimiter can be specified in the registry at the following location:
'HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Jet \ 4.0 \ Engines \ Text
'"Format" = "TabDelimited" 用Tab符作分隔符
'or
'"Format" = "Delimited(;)" 用指定的符号作分隔符
Private Sub Command1_Click()
Cn.ConnectionString = "Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=F:\TEST\杂\各种资料的连接\File;Extensions=asc,csv,tab,txt;HDR=Yes;FMT=Delimited;"
Cn.Open
Dim Sql As String
Sql = "select * from test.txt"
Rst.CursorLocation = adUseClient
Rst.Open Sql, Cn, adOpenStatic, adLockPessimistic
Set DataGrid1.DataSource = Rst
End Sub

zzxap 2009-05-27
  • 打赏
  • 举报
回复
比较麻烦
zzxap 2009-05-27
  • 打赏
  • 举报
回复
GMCC,11,11
GMCC,22,22
GMCC,33,33
AMCC,11,11
AMCC,33,33

把这些数据行列分割放进table里就
hztltgg 2009-05-27
  • 打赏
  • 举报
回复
最方便的方法应该是用text文本格式的odbc访问方式来处理

http://www.cnblogs.com/yequancheng/archive/2007/04/23/odbc.html
allanli 2009-05-27
  • 打赏
  • 举报
回复
TextWriter
TextReader

看看msdn下面System.IO命名空间下面的类吧

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧