点击上方蓝字关注我们

今天我们聊一聊VB中文件数据的读与写,读与写可以让你批量导入计算再把计算结果导出去,而不是人为的输入计算这样效率太低。我今天将从以下几点进行讲解说明:

  1. 批量的输入输出控件

  2. 文件读写的控件与函数

  3. 文件读写计算的例子

1.文件的批量输入输出控件

文件的批量输入输出控件主要有以下两种:

  • TextBox控件(一般都是软件自带,不可以大量输入,需要设置换行MultiLine为true和出现滚动条ScrollBars为Both。)

  • RichText控件(该控件是外部控件,需要自己在外部控件中添加引用【为了避免每次都添加该控件最好将外部引用到的控件保存为工程文件】,可以大量输入。)

  • MSHFlexGrid (该控件为表格控件是外部控件,也是需要自己添加,该控件既可以输入也可以添加比较方便,在该篇中主要用于输出,你也可以自己输入计算并输出)

该篇主要使用TextBox控件进行数据的输入和输出,MSHFlexGrid 也是一个进行数据的输出,在该篇中仅仅是为了让大家熟悉他的功能。

          

2.文件读写的控件与函数

文件读写的控件我们主要用到以下控件:

  • CommonDialog1

用它之前我们先来介绍一下它的属性,这个控件是先打开文件文件在选择要读取的文件,我们先从文件的打开说明。

1.打开文件的格式

Open 文件名 [For模式 As [#]文件号

Open CommonDialog1.FileName For Input As #1

其中,文件名是指要打开的文件,可以包含驱动器名及路径名,既可以是常量也可以是字符变量。模式是说明文件打开的方式,对于顺序文件(操作文本较为友好的)而言,有三种模式:

  1. Output(输出):也就是向内存写入文件

  2. Input(输入):也就是从内存中读取文件

  3. Append(添加):相当于将数据添加到末尾,有点像JS中的Push方法

2.从文件中读取数据

要读取顺序文件的内容,我们应该以Input模式打开该文件,读取数据格式的有以下三种:

  1. Input    #  文件号,字段 1[,字段2]  {,.....,}

  2. Line Input    # 文件号,字符串变量

  3. Input $ ( 读取字数,#文件号) 

如下面的数据我们从格式一和格式二读取方式进行说明因为格式三不常用所以这里不做说明,如果感兴趣的读者可以去试试。

1)格式一说明:读出的数据分别放在给出的变量之中,所以要求变量的顺序要和文件中各字段顺序相同(即每个变量应与其对应字段得数据类型一致),通俗来说就是文本文件中的数据要和代码中的数据类型及个数对应否则会报错。

文本文件格式

'点位,X,Y,HI01,,234232.232,23423424,234,1920.358I02,,234232.232,23423424,234,1920.358I03,,234232.232,23423424,234,1920.358

代码

Dim dot#, X#, Y#, H#'定义变量   分别对应 点位,X,Y,H'格式一会全部同时读取Private Sub Command5_Click()    CommonDialog1.Filter = "文本文件(*.txt)|*.txt|所有文件(*.*)|*.*|"    CommonDialog1.ShowOpen '打开文件 或者可以用 CommonDialog1.Action = 1 效果一样    Open CommonDialog1.FileName For Input As #1'这里#1代表文件号        Do While Not EOF(1)  '不满足条件时执行             Input #1, dot,X,Y,H  '这个格式要对应上文本数据中的变量否则无法进行读取会报错             '这里inputText是TextBOx控件重新命名的名称,inputText.Text的主要目的就是把上面的文本数据读入和展示出来便于我们后续对数据进行处理。            inputText.Text = inputText.Text + dot+ X + Y + H + vbCrLf '拼接显示每读完一行数据用vbCrLf进行换行        Loop    Close #1    MsgBox "导入完成", , "提示"End Sub

2)格式二说明(推荐使用):每次从文件中读取一行信息,它不以逗号作为分隔符,而是以回车符作为分隔符,因此此种方式处理文本最为合适。

文本格式

'文本内容的输入格式xa,,12312.1212ya,,233.121a,,12d,,34

代码

Dim strs$'定义要读入的类型变量Private Sub Command5_Click()    CommonDialog1.Filter = "文本文件(*.txt)|*.txt|所有文件(*.*)|*.*|"    CommonDialog1.ShowOpen '打开文件 或者可以用 CommonDialog1.Action = 1 效果一样    CommonDialog1.CancelError = False '用户点击取消后避免报错    inputText.Text = "" '每次导入前清空避免覆盖    Text3.Text = CommonDialog1.FileName '读取文件路径名称    Open CommonDialog1.FileName For Input As #1        Do While Not EOF(1)  '不满足条件时执行            Line Input #1, strs '按行读取这里比格式一少了好多变量因为格式二是按行读取会把全部数据一行一行的读取            '这里inputText是TextBOx控件重新命名的名称,inputText.Text的主要目的就是把上面的文本数据读入和展示出来便于我们后续对数据进行处理。            inputText.Text = inputText.Text + strs + vbCrLf            sInput = inputText.Text '存放导入的数据便于后续        Loop    Close #1    MsgBox "导入完成", , "提示"End Sub

          

3.文件读写计算的例子

我们处理文本数据最好选择用格式二的形式来读取并对文件进行处理,我们接下来就用格式二这种方法来撸一个读写文本文件并进行坐标反算的例子。

因为该代码编写较为简单所以不再赘述,有问题可以通过关注我底部的公众号联系我。

本次使用的字符串方法是:

InStr(字符串1,字符串2)在字符1中查找到你所要查找的字符串2并返回该字符串所在的下标

如:

ipos = InStr(sInput, ",,")'这里我们要查找的是",,"两个双引号

完整代码

Option Explicit'放在外面让全部函数都可以使用Const PI = 3.14159265358979Dim xa#, ya#, xb#, yb#, fenmiao#, position%, xx# '已知数据Dim fwj#, dab#  '终点坐标Dim dxa$, dya$, dxb$, dyb$Dim ipos%, strs$, sInput$'全部同时读取Private Sub Command5_Click()    CommonDialog1.Filter = "文本文件(*.txt)|*.txt|所有文件(*.*)|*.*|"    CommonDialog1.ShowOpen '打开文件 或者可以用 CommonDialog1.Action = 1 效果一样    CommonDialog1.CancelError = False '用户点击取消后避免报错    inputText.Text = "" '每次导入前清空避免覆盖    Text3.Text = CommonDialog1.FileName '读取文件路径名称    Open CommonDialog1.FileName For Input As #1        Do While Not EOF(1)  '不满足条件时执行             'Input #1, str '指定文件个数读取文件            Line Input #1, strs '按行读取            inputText.Text = inputText.Text + strs + vbCrLf            sInput = inputText.Text '存放导入的数据便于后续            'Print LOF(1)            'Print EOF(1)            'Print Seek(1)        Loop    Close #1    MsgBox "导入完成", , "提示"End Sub'正算'以下这个要在以上信息读取无误后'反算Public Function coordinateF() As Double    Const PI = 3.14159265358979    Dim dx#, dy#    If Trim(inputText.Text) = "" Then        MsgBox "请您输入已知数据后再计算!", vbApplicationModal + vbExclamation, "友情提示"    Else        '截取读取文件中的数据vbCr回车符      '截取读取文件中的数据vbCr回车符    ipos = InStr(sInput, ",,"): dxa = Left(sInput, ipos - 1):  sInput = Mid(sInput, ipos + 2) '截取到点号xa    ipos = InStr(sInput, vbCr): xa = Val(Left(sInput, ipos - 1)): sInput = Mid(sInput, ipos + 2) '截取到数值12312.1212    ipos = InStr(sInput, ",,"): dya = Left(sInput, ipos - 1):  sInput = Mid(sInput, ipos + 2) '截取到点号ya    ipos = InStr(sInput, vbCr): ya = Val(Left(sInput, ipos - 1)): sInput = Mid(sInput, ipos + 2) '截取到数值12312.1212    ipos = InStr(sInput, ",,"): dxb = Left(sInput, ipos - 1):  sInput = Mid(sInput, ipos + 2) '截取到点号a    ipos = InStr(sInput, vbCr): xb = Val(Left(sInput, ipos - 1)): sInput = Mid(sInput, ipos + 2) '截取到数值12    ipos = InStr(sInput, ",,"): dyb = Left(sInput, ipos - 1):  sInput = Mid(sInput, ipos + 2) '截取到点号d    ipos = InStr(sInput, vbCr): yb = Val(Left(sInput, ipos - 1)): sInput = Mid(sInput, ipos + 2) '截取到数值34    'Print xa; ya; xb; yb    '将截取出来的值添加到表格中    With table        '设置行和列        .Rows = 5: .Cols = 5        '在第一行表头中添加数据        .Row = 0: .Col = 1: .Text = dxa        .Row = 0: .Col = 2: .Text = dya        .Row = 0: .Col = 3: .Text = dxb        .Row = 0: .Col = 4: .Text = dyb        '在第二行中添加数据        .Row = 1: .Col = 1: .Text = xa        .Row = 1: .Col = 2: .Text = ya        .Row = 1: .Col = 3: .Text = xb        .Row = 1: .Col = 4: .Text = yb    End With        dx = xb - xa '△X        dy = yb - ya '△Y        dab = Sqr(dx ^ 2 + dy ^ 2) '获得两点间距离        xx = Atn(Abs(dy / dx)) '获得象限角        If dx > 0 And dy > 0 Then '第一象限            fwj = xx        ElseIf dx < 0 And dy > 0 Then '第二象限            fwj = PI - xx        ElseIf dx < 0 And dy < 0 Then '第三象限            fwj = PI + xx        ElseIf dx > 0 And dy < 0 Then '第四象限            fwj = 2 * PI - xx        ElseIf dx = 0 And dy > 0 Then '方位角为90°            fwj = PI / 2        ElseIf dx = 0 And dy < 0 Then '方位角为270°            fwj = 3 * (PI / 2)        ElseIf dx > 0 And dy = 0 Then '方位角为0°            fwj = 0        ElseIf dx < 0 And dy = 0 Then '方位角为180°            fwj = PI        End If        Call hdTodfm(fwj)    End IfEnd Function'创建函数将弧度转度分秒、度.分秒Public Function hdTodfm(hudu#) As Double    Const PI = 3.14159265358979    Dim du#, fen#, miao#, jd# '已知数据    '默认计算    jd = hudu * (180 / PI)    du = Int(jd)    fen = Int((jd - du) * 60)    miao = ((jd - du) * 60 - fen) * 60    Text4.Text = "D:" & Format(dab, "0.00000") + "m" + vbCrLf + "方位角:" & Format(du, "0") & "°" & Format(fen, "00") & "′" & Format(miao, "00.00") & "″"End Function'计算Private Sub Command2_Click()    Call coordinateFEnd Sub'保存文件Private Sub Command3_Click()    If Text4.Text = "" Then        MsgBox "现在还没有数据,请您计算或输入后再保存吧", vbApplicationModal + vbExclamation, "提示"    Else        CommonDialog1.Filter = "文本文件(*.txt)|*.txt|所有文件(*.*)|*.*|"        CommonDialog1.ShowSave '另存为  或者可以用CommonDialog1.Action=2 效果一样        CommonDialog1.CancelError = False        Open CommonDialog1.FileName For Output As #1            Print #1, Text4.Text '将我们算出的值保存起来        Close #1        MsgBox "保存成功", , "提示"    End IfEnd Sub'清空Private Sub Command4_Click()    inputText.Text = ""End SubPrivate Sub Form_Load()    inputText.Text = ""End Sub'在表格中输入数据表格Private Sub table_KeyPress(KeyAscii As Integer)    With table        '只能输入数字        If IsNumeric(Chr(KeyAscii)) Then            .Text = .Text & Chr(KeyAscii)        ElseIf KeyAscii = 8 Then            If Len(.Text) > 0 Then                .Text = Left(.Text, Len(.Text) - 1)            End If        End If   End WithEnd Sub'删除Private Sub table_KeyUp(KeyCode As Integer, Shift As Integer)    If KeyCode = 46 Then        table.Text = ""    End IfEnd Sub

界面效果

我就知道你“在看”

vb 字符串截取_VB进阶之玩转文件读写相关推荐

  1. C#字符串截取学习总结

    C#几个经常用到的字符串截取 http://www.cnblogs.com/lykbk/archive/2012/06/28/lyk1232132.html 一. 1.取字符串的前i个字符 (1)st ...

  2. vb字符串选定复制代码

    登录 网页 微信 知乎 图片 视频 医疗 汉语 问问 更多» 搜索答案我要提问 首页 问题分类 特色 问豆商城 个人中心 263,068,823 问题已被解决 QQ一键登录 IT技术 vb 获取 ...

  3. Sqlserver 字符串截取函数

    Sqlserver字符串截取函数,常用的有3个,left,right和substring. 故名思议,left从左侧取,right从右侧取,substring从指定位置取几位. 主要应用在两个方面: ...

  4. php取后三字符串,php字符串截取问题

    php字符串截取问题 * @author Chunsheng Wang * @param string $String the string to cut. * @param int $Length ...

  5. 字符串截取固定长度的方法

    这个函数也没有什么特别之处,就是可以截取一定长度的字符串,可能小特点就是len是字节,解决了汉字与英文字节不一样导致直接截取到的长度不一样的问题, #region 字符串截取函数   public s ...

  6. swift中字符串截取方法(substring)

    下面介绍2种swift的字符串截取方法,实际上用到了substringFromIndex,substringToIndex,substringWithRange 1.将String转化为NSStrin ...

  7. 一个效率更高的全半角字符串截取函数

    [原创,转载请注明:[url]http://wfyang.blog.51cto.com[/url]] 现在流传的那几个字符串截取函数,一般都是对字符串进行循环判断,如果要截取的串比较长,效率就成了一个 ...

  8. 字符串截取,对数字,英文,汉字都可以

    同长我们在建站的过程中,都会遇到这样的问题,UTF-8编码格式下英文和汉字占用的字节数不同,导致字符串截取过程中会遇到冲突,使用下面这个函数可以完美的解决这个问题. function cc_msubs ...

  9. shell脚本 8种字符串截取的方法

    来源:http://www.jb51.net/article/56563.htm Linux 的字符串截取很有用.有八种方法. 假设有变量 var=http://www.aaa.com/123.htm ...

最新文章

  1. 年底送点福利,包邮送55本!Python、大数据、人工智能任你挑!
  2. 你真的了解 OpenJDK 吗?
  3. oracle中decode函数用法及应用
  4. SharpDevelop 开源的 C# IDE ! 和 SharpZipLib
  5. java ftp分片续传_Java写的支持断点续传的FTP
  6. C++ 自定义string类 重载相关运算符
  7. Nginx限速模块初探
  8. SpringCloud工作笔记043---SpringCloud 从整体上解决跨域问题_zuul网关配置实现跨域
  9. Easyui 弹出加载中的遮罩的两种方法
  10. Excel中,通过 「条件格式」 实现, 下拉菜单选择某个值时,这一行的颜色改变。
  11. 2021-03-16 转自知乎专栏 https://zhuanlan.zhihu.com/p/24482664
  12. utilities(C++)——单例(Singleton) (使用智能指针 shared_ptr)
  13. GitHub使用教程
  14. 利用word2007插入参考文献
  15. 2022 年十大绩效考核技巧
  16. ps裁剪和裁切的区别_ps裁剪工具怎么用?调整图像与画布的尺寸(三)
  17. outlook邮箱邮件大小限制_附件大小超过了允许的限制错误 - Outlook | Microsoft Docs...
  18. js保存数据到浏览器缓存
  19. 如何从零开始创建React项目
  20. 全国最新行政区划sql文件

热门文章

  1. iPhone 13需求旺盛 富士康再度重金招工
  2. 瑞信中国前CEO唐臻怡加盟商汤科技出任副总裁
  3. 消息称AirPods 3搭载U1芯片 耳机柄变小
  4. 狗不理是怎样混到狗都不理的?
  5. 今日头条10.82亿元拿下 “中国最牛街道”土地:将与腾讯、阿里做邻居
  6. iOS 14代码泄露iPhone 12系列细节:有且仅有两款配备ToF 3D镜头
  7. 16小时31分12秒!2019天猫双11成交额超2135亿元,超越2018年全天成交额
  8. iQOO Neo 855版首发强悍闪充:4500mAh电池10分钟充至25%
  9. 华为这款无线耳机斩获11项IFA大奖,11月正式上市
  10. Bose 700无线消噪耳机评测:让用户不受打扰是它最大的温柔