比较无法正常工作的文件

时间:2018-07-03 14:49:07

标签: vb.net file-handling

嗨,有人可以向我解释为什么这行不通。

我基本上必须要创建名为Books和NewBooks的文本文件...

从Web请求中填充文本文件,然后将信息解析为文本文件...当我启动程序时,书和新书是相同的,并且几乎是彼此的副本。

完成了更多的Web请求以更新NewBooks文本文件,当我比较它们时,如果NewBooks中有一行不在Books中,则将其添加到名为myNewBooks的第三个文本文件中。现在,我将在此处显示的初始代码可以按预期运行

Dim InitialBooks = File.ReadAllLines("Books.json")
    Dim TW As System.IO.TextWriter
    'Create a Text file and load it into the TextWriter 
    TW = System.IO.File.CreateText("myNewBooks.JSON")

    Dim NewBooks = String.Empty
    Using reader = New StreamReader("NewBooks.json")
        Do Until reader.EndOfStream
            Dim current = reader.ReadLine
            If Not InitialBooks.Contains(current) Then 
                NewBooks = current & Environment.NewLine

                TW.WriteLine(NewBooks)
                TW.Flush()
                'Close the File 
            End If
        Loop
    End Using
    TW.Close() : TW.Dispose()

但是因为我的文本文件行中的部分字符串包含一个url,有时我发现同一本书使用不同的url ...我得到了重复的书籍条目,因为url是唯一的区别。所以我想我会在url之前分割字符串,以便我只比较标题,描述和区域...在文本文件中的一行看起来像这样:

{“标题”:“此处为我的标题”,“描述”:“此处为我的描述”,“区域”:“此处为我的区域”,“网址”:“此处为我的网址”,“图片”:“我的图片在这里“};

所以今天有一个家伙帮助我弄清楚了如何分割线,看起来更像这样:

{“标题”:“此处为我的标题”,“描述”:“此处为我的描述”,“区域”:“此处为我的区域”,“网址”

这很棒,但是现在我比较时看不到第一行包含分割线,我也不明白为什么...这是修改后的代码。

Dim InitialBooks = File.ReadAllLines("Books.json")
    Dim TW As System.IO.TextWriter
    'Create a Text file and load it into the TextWriter 
    TW = System.IO.File.CreateText("myNewBooks.JSON")

    Dim NewBooks = String.Empty
    Using reader = New StreamReader("NewBooks.json")
        Do Until reader.EndOfStream
            Dim current = reader.ReadLine
            Dim splitAt As String = """Url"""
            Dim index As Integer = current.IndexOf(splitAt)
            Dim output As String = current.Substring(0, index + splitAt.Length)
            If Not InitialBooks.Contains(output) Then 
                NewBooks = current & Environment.NewLine

                TW.WriteLine(NewBooks)
                TW.Flush()
                'Close the File 
            End If
        Loop
    End Using
    TW.Close() : TW.Dispose()

您的智慧将不胜感激!

1 个答案:

答案 0 :(得分:0)

您的OP令人困惑。

如果我正确理解:

您有3个文件图书,新书和MyBooks。 您可以从网络下载数据,如果该数据不在“书籍”中,则将其添加到NewBooks,否则将其添加到MyBooks(重复)。

看到您正在使用JSON,我将通过以下方式进行操作。

加载书籍,在下载数据时将其检查并与书籍进行比较。然后写入适当的文件。

Imports System.Web.Script.Serialization ' for reading of JSON (+add the reference to System.Web.Extensions library)
Dim JSONBooks = New JavaScriptSerializer().DeserializeObject(Books_string)

检查具有断点的JSONBooks。您将看到它的外观。 删除数据时,您只需按标题,URL或您想要的任何内容检查其中是否存在书籍。

由于您只展示了一本书

Debug.Print(JSONBooks("Title")) 'returns >>>My Title Here

如果您有更多

JSONBooks(x)("Title") 'where x is book number. 

因此您可以遍历所有书籍并检查所需内容。

JSON数组看起来像这样(如果您需要构造它)

[{book1},{book2},...]