Удаление пустых полей из файла с разделителями с помощью 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