【问题标题】:How to change "WriteAllLines" data type in VB如何在 VB 中更改“WriteAllLines”数据类型
【发布时间】:2016-06-13 00:06:00
【问题描述】:

我正在尝试找到两个文件之间的联合
当我第一次运行程序时,信息被格式化为concat 样式,它只是结合了两个文件。所以我认为这是由于它是字符串变量,我无法找到文件之间的联合。我试图改变它doubleint 并没有奏效。 (很可能我不知道如何正确地做到这一点)

来自第一个文件的文本:

1 2 3 4444 5555 6666

第二个文件中的文本:

1 2 3 7777 8888 9999

基于该输入的期望输出:

1 2 3

这应该显示在 datagridview 框中,因为它是文件之间唯一通用的数字。

更多的数字(准确地说是 10,000)。我将数据合并,然后从记事本进入 bin 和 Ctrl+F txt,在信息中找不到任何相似之处。然而它仍然产生了输出。我在想如果系统找不到文件之间的共同点,它会显示一个空白的 .txt 文件,但我可能错了。

    Dim firstFile() As String = IO.File.ReadAllLines("Random_Numbers_One.txt")
    Dim secondFile() As String = IO.File.ReadAllLines("Random_Numbers_Two.txt")

    IO.File.WriteAllLines("Union.txt", firstFile.Union(secondFile))
    Dim fileUnion() As String = IO.File.ReadAllLines("Union.txt")
    Dim format = From Numbers In fileUnion
                 Let data = Numbers.Split(","c)
    dgvThree.DataSource = format.ToList

【问题讨论】:

  • 只是想合并两个列表并删除重复的数字吗?是真的吗?
  • 它工作正常!你的问题到底是什么?请写问题代码的地方
  • 显示文件中的示例文本。
  • 请显示您输入文件的样本以及您期望的输出。
  • 我看到了您的编辑。您还需要显示预期的输出,考虑到这一点,更小的样本会更好地工作。只是每个文件的前 5 个数字(进行了人为的更改,因此其中一个数字出现在两个文件中),以及预期的输出是足够的......小到可以手动计算输出,所以我们可以看到你期望算法能够做到。

标签: .net vb.net linq io


【解决方案1】:

你想要的是不是工会!在关系数据方面,您的样本数据的联合如下所示:

1 2 3 4444 5555 6666 7777 8888 9999

也可以通过 FULL JOIN + COALESCE 来表达。或者,如果您的意思是 UNION ALL / 连接,您可能会得到这个:

1 2 3 4444 5555 6666 1 2 3 7777 8888 9999

它们都不接近您的预期输出,而是看起来像您的数据集的交集,通常也称为 INNER JOIN。

这可以在 VB.Net 中用一行代码完成:

dgvThree.DataSource = IO.File.ReadLines("Random_Numbers_One.txt").Intersect(IO.File.ReadLines("Random_Numbers_Two.txt"))

但为了使其更具可读性:

dgvThree.DataSource = IO.File.ReadLines("Random_Numbers_One.txt").
            Intersect(IO.File.ReadLines("Random_Numbers_Two.txt")) 

【讨论】:

    【解决方案2】:

    我认为您想要列表的交集,而不是联合。

    Dim firstFile() As String = IO.File.ReadAllLines("Random_Numbers_One.txt")
    Dim secondFile() As String = IO.File.ReadAllLines("Random_Numbers_Two.txt")
    dim common() as String = firstFile.Intersect(secondFile)
    

    但是如果你还需要两个数组的并集,那么:

    dim allLines() as String = firstFile.Union(secondFile)
    

    【讨论】:

      【解决方案3】:

      也许试一试。它应该结合两个列表并在重复项上重叠。

      Dim firstFile() As String = IO.File.ReadAllLines("Random_Numbers_One.txt")
       Dim secondFile() As String = IO.File.ReadAllLines("Random_Numbers_Two.txt")
       Dim result() As String = firstFile.Concat(secondFile).Distinct().ToArray()
      

      【讨论】:

        猜你喜欢
        • 2016-08-25
        • 2014-04-08
        • 1970-01-01
        • 1970-01-01
        • 2015-03-16
        • 2012-02-20
        • 2010-11-24
        • 2020-07-27
        • 2012-10-20
        相关资源
        最近更新 更多