Удаление пустых полей из файла с разделителями с помощью VB.NET

Использование VB.NET (VS2013) Я хотел бы прочитать файл с разделителями и удалить поле, если все записи имеют одно и то же пустое поле (может быть несколько полей на запись). Файл с разделителями может иметь число столбцов "x" и количество строк "y", и как только пустые поля будут удалены, мне нужно записать его обратно как новый файл с разделителями.

Входной файл будет иметь заголовок, который должен поддерживаться, и порядок записей должен поддерживаться. Я знаком с использованием TextParser для чтения файла и знаком с написанием файла - мне нужна помощь в чтении пустого поля и удалении его, если оно существует во всем файле.

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

Спасибо!

2 ответа

Я предполагаю, что каждая строка отделяется новой строкой... открыть как текстовый файл, прочитать строку за раз и использовать метод Split, чтобы разбить строку на массив строк. Метод split примет аргумент, который определяет используемый вами разделитель. Откройте файл назначения и запишите массив строк, используя цикл.

ОБНОВИТЬ

Подумав об этом, у вас могут появиться записи, в которых есть пара пустых столбцов, а в остальных есть данные. Я не уверен, что вы захотите удалить эти столбцы, потому что при этом вы потеряете структуру строки.

Так что вместо использования StringSplitOptions.RemoveEmptyEntriesВы можете просто сделать Split() а затем выполнить некоторые Linq чтобы узнать, если Split() произвел массив пустых строк.

Нечто подобное (с такими же результатами)...

Imports System
Imports System.Linq

Public Module Module1

    Public Sub Main()
        Dim data As String = "|||||"
        Dim pieces As String() = data.Split("|"c)
        If pieces.Where(Function(p) String.IsNullOrEmpty(p) = False).Count = 0 Then
            Console.WriteLine("All elements are empty")
        Else
            ' Do something
        End If
    End Sub
End Module

демонстрация

СТАРЫЙ ОТВЕТ

String.Split() имеет перегрузку, которая исключает StringSplitOptions, использование StringSplitOptions.RemoveEmptyEntries с вашим String.Split() и если все записи будут пустыми, то вы получите массив с длиной 0, который вы можете игнорировать.

Imports System

Public Module Module1
    Public Sub Main()
        Dim data As String = "|||||"
        Dim pieces As String() = data.Split(new Char() {"|"}, StringSplitOptions.RemoveEmptyEntries)
        If pieces.length = 0 Then
            Console.WriteLine("All elements are empty")
        Else
            ' Do something
        End If
    End Sub
End Module

Результаты:

All elements are empty

демонстрация

Другие вопросы по тегам