Сравнение файлов не работает должным образом - PullRequest
0 голосов
/ 03 июля 2018

Привет, ребята, может кто-нибудь объяснить мне, почему это не работает.

Мне, в основном, нужны текстовые файлы, называемые «Книги» и «Новые книги» ...

Текстовые файлы заполняются из веб-запроса, а затем информация разбирается в текстовых файлах ... при запуске программы Книги и новые книги идентичны и в значительной степени являются копией друг друга.

выполняется больше веб-запросов для обновления текстового файла NewBooks, и когда я сравниваю их, если в NewBook ​​есть строка, которой нет в 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-адресом, чтобы я просто сравнил заголовок, описание и регион ... например, строка в моих текстовых файлах выглядит примерно так:

{"Title": "My Title Here", "Description": "My Description Here", "Region": "My Region Here", "Url": "My Url Here", "Image": "My Изображение здесь "};

Итак, сегодня один парень помог мне понять, как разбить мою линию, чтобы она выглядела примерно так:

{"Title": "My Title Here", "Description": "My Description Here", "Region": "My Region Here", "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 голосов
/ 03 июля 2018

Ваш ОП сбивает с толку.

Если я правильно понял:

У вас есть 3 файла «Книги», «Новые книги» и «Мои книги». Вы загружаете данные из Интернета, если эти данные не находятся в Книгах, вы добавляете их в 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},...]
...