Luiey Ichigo Ответов: 1

Как прочитать конкретную ячейку CSV?


Как прочитать конкретный файл ячейки CSV? Я использую CSVReader для получения всех данных из CSV для отправки в базу данных.

В настоящее время существует какой-то csv-файл, который начинается с какой-то строки. Смотрите изображения здесь[^] для образца такого рода csv.

Я хочу получить данные для ячеек A:4, A:5, A:6 и прочитать все значения, начиная с A8: D8 вниз.

Я закончу читать все только в том случае, если удалю строку 1-7

Private Sub ReadCSVData(ByVal filepathname As String)
    Using csv As New CsvReader(New StreamReader(filepathname), True)
        Dim fieldCount As Integer = csv.FieldCount
        Dim headers() As String = csv.GetFieldHeaders()
        Dim jsonData As New JArray()
        Dim dt As New DataTable
        Do While csv.ReadNextRecord()
            Dim record As New JObject()
            For i As Integer = 0 To fieldCount - 1
                record.Add(New JProperty(headers(i), csv(i)))
            Next
        Loop
    End Using
End Sub

Теперь реальная CSV-файл как изображение прикрепить ссылку

Что я уже пробовал:

Private Sub ReadCSVData(ByVal filepathname As String)
Использование csv в качестве нового CsvReader(New StreamReader(filepathname), True)
Дим fieldCount как целое число = формат CSV.FieldCount
Дим заголовки() как строка = формат CSV.GetFieldHeaders()
Дим jsonData как новый JArray()
Дим ДТ в качестве нового объекта DataTable
Делать при CSV-файл.ReadNextRecord()
Тусклая Запись Как новый объект работы()
Для i As Integer = 0 To fieldCount - 1
запись.Добавить (New JProperty (headers (i), csv(i)))
Следующий
Петля
Конец Использования
Конец Подводной Лодки

Richard MacCutchan

Вам просто нужно использовать счетчик, чтобы прочитать первые 7 строк,но игнорировать их. Таким образом, вы обрабатываете ячейки только тогда, когда количество строк достигает 8.

1 Ответов

Рейтинг:
9

Richard Deeming

Предполагая, что вы всегда пропускаете первые три строки, а данные CSV всегда отделены от дополнительных данных пустой строкой, что-то вроде этого должно работать:

Private Function ReadCSVData(ByVal filepathname As String) As JObject
    Dim result As New JObject()
    
    Using sr As New StreamReader(filepathname)
        ' Skip the first three lines:
        sr.ReadLine()
        sr.ReadLine()
        sr.ReadLine()
        
        ' Grab the extra data from the next lines:
        Dim line As String = sr.ReadLine()
        Do Until String.IsNullOrWhiteSpace(line)
            Dim parts() As String = line.Split(":"c)
            If parts.Length = 2 Then
                result.Add(New JProperty(parts(0).Trim(), parts(1).Trim()))
            End If
            
            line = sr.ReadLine()
        Loop
        
        ' Read the CSV data:
        Using csv As New CsvReader(sr, True)
            Dim fieldCount As Integer = csv.FieldCount
            Dim headers() As String = csv.GetFieldHeaders()
            Dim jsonData As New JArray()
            
            Do While csv.ReadNextRecord()
                Dim record As New JObject()
                For i As Integer = 0 To fieldCount - 1
                    record.Add(New JProperty(headers(i), csv(i)))
                Next
                
                jsonData.Add(record)
            Loop
            
            result.Add(New JProperty("data", jsonData))
        End Using
    End Using
    
    Return result
End Function

Выход:
{
  "Sensor ID": "...",
  "Sensor Description": "...",
  "Status": "...",
  "data": [
    {
      "Time": "...",
      "Sensor A": "...",
      "Sensor B": "...",
      "Sensor C": "..."
    },
    ...
  ]
}


Luiey Ichigo

Еще раз спасибо за вашего гида! Ваша идея очень помогает