注册 登录
编程论坛 VB.NET论坛

vb.net读写文件,高手请进

lgmsddy 发布于 2010-06-23 10:16, 1409 次点击
下面是文件内数据:
30,100,50
20,100,10
10,50,10
读取上面的文件后,写成下面的形式:
30,100,50
20,10
10,50

也就是说,上一行和下一行的数据如果相同,就不写,怎么来判断这个过程

说的不清楚,在来举个例子
读取下面的数
100,50,60
100,20,30
因为第二行也有100,所以写的时候
100,50,60  
20,30   ‘第一行已经有100,第二行就不写了,
怎么实现这个分析判读的过程,跪求!
11 回复
#2
lgmsddy2010-06-24 15:56
怎么没人回复,给个提示也行啊
#3
lgmsddy2010-06-24 15:57
版主,给点思路吧
#4
sugala2010-06-24 16:26
貌似版主不在,,我也急着等他的意见呢。。。

#5
南城草2010-06-24 20:20
回复 楼主 lgmsddy
你的题目说得不是很清晰,我读出了点意思。下面是我给的一点分析思路。
一,你先声明个数组把已经有的数据进行存储。
二,for 循环   把新进来的数据和原先已经有的数据进行比较。用If语句进行判断,比较。控制输出


我不是很明白你说的意思就不提供代码了,怕浪费资源了。如果要补充再看看吧。
#6
lgmsddy2010-06-25 11:19
谢谢楼上的兄弟
#7
sywzs2010-06-26 06:18
不知道你的数据源于何处,又要写道哪里?说清楚了可以给你一段代码。
#8
lgmsddy2010-06-27 07:38
版主来了,谢谢,数据来自记事本,热盼!!!
#9
sywzs2010-06-28 05:01
现学现卖,查了一下帮助,把1楼的数据存到记事本里,编了如下代码,供参考吧。
在窗体上放了两个Listbox控件和一个按钮控件
Imports System
Imports
Public Class Form2
    Private Sub Main()
        Try
            Using sr As StreamReader = New StreamReader("D:\VS编程\读写文件.txt")
                Dim line As String
                Do
                    line = sr.ReadLine()
                    ListBox1.Items.Add(line)
                    Console.WriteLine(line)
                Loop Until line Is Nothing
                sr.Close()
            End Using
        Catch E As Exception
            Console.WriteLine("不能读取文件!")
            Console.WriteLine(E.Message)
        End Try
    End Sub

    Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        Main()
        Dim STR0 As String
        Dim J As Integer = ListBox1.Items.Count - 1
        Dim AA(J, 2), BB(J, 2) As String
        For I As Integer = 0 To J
            STR0 = ListBox1.Items(I)
            AA(I, 0) = Mid(STR0, 1, InStr(STR0, ",") - 1)
            STR0 = Mid(STR0, InStr(STR0, ",") + 1)
            AA(I, 1) = Mid(STR0, 1, InStr(STR0, ",") - 1)
            AA(I, 2) = Mid(STR0, InStr(STR0, ",") + 1)
        Next
        BB(0, 0) = AA(0, 0)
        BB(0, 1) = AA(0, 1)
        BB(0, 2) = AA(0, 2)
        For I As Integer = 1 To J
            BB(I, 0) = IIf(AA(I, 0) = AA(I - 1, 0), "", AA(I, 0))
            BB(I, 1) = IIf(AA(I, 1) = AA(I - 1, 1), "", AA(I, 1))
            BB(I, 2) = IIf(AA(I, 2) = AA(I - 1, 2), "", AA(I, 2))
        Next
        For I As Integer = 0 To J
            STR0 = BB(I, 0) + IIf(BB(I, 1).Length > 0, "," + BB(I, 1), "") + IIf(BB(I, 2).Length > 0, "," + BB(I, 2), "")
            ListBox2.Items.Add(STR0)
        Next
    End Sub
End Class
#10
不说也罢2010-06-28 18:31
根据sywzs版主代码,我也来凑个热闹

程序代码:
Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim i As Integer = 0 '用于计数,从第二行开始比对
        Dim t As Integer = 0
        Dim a() As String '用于记录上一行的字符
        Dim b() As String '用于记录当前行的字符
        Dim bSame As Boolean = False '判定是否在上一行有相同的
        Dim newstring As String = "" '用于输出筛选后的字符
        Try
            Using sr As StreamReader = New StreamReader("D:\1.txt")
                Dim line As String
                Do
                    newstring = "" : ReDim b(0) : bSame = False '每次读取一行前初始化变量值
                    line = sr.ReadLine()

                    t = UBound(line.Split(","))
                    For j As Integer = 0 To t
                        ReDim Preserve b(j)
                        b(j) = line.Split(",")(j)
                    Next
                    i = i + 1
                    If i > 1 Then '从第二行开始比对
                        For j = 0 To b.Count - 1
                            bSame = False
                            For k = 0 To a.Count - 1
                                If a(k) = b(j) Then
                                    bSame = True
                                    Exit For
                                End If
                            Next
                            If bSame = False Then newstring = newstring & b(j) & ","
                        Next

                        Console.WriteLine(newstring.Substring(0, newstring.Length - 1)) '输出结果到.net的输出窗口
                    Else
                        Console.WriteLine(line)'输出结果到.net的输出窗口
                    End If

                    a = b '比对结束后,将数组B赋值给A,便于下一行比对
                Loop Until line Is Nothing
                sr.Close()

            End Using
        Catch Ex As Exception
            Console.WriteLine("不能读取文件!")
            Console.WriteLine(Ex.Message)
        End Try


    End Sub
End Class
#11
lgmsddy2010-06-29 21:45
谢谢斑竹,太谢谢了!!!!
#12
lsyzs2016-04-28 12:04
这个不难啊,就是一循环。。
1