Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/25: Рейтинг темы: голосов - 25, средняя оценка - 4.64
70 / 60 / 16
Регистрация: 22.10.2012
Сообщений: 351

Как прочитать csv файл с разделителем 'точка с запятой'?

01.12.2016, 14:36. Показов 5515. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
просто сломал голову
вот текст csv файла
Точка;Назначение;НачисленнаяСумма;НомерЧ ека;Время;Аккаунт
16741;ЖКХ РАЗДОЛЬНЕНСКОЕ;95;10050;27.11.2016 13:39;22148


вот код, который в гугле в каждом закаулке валяется
VB.NET
1
2
Dim cn As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Администратор\Desktop\; Extended Properties='text;HDR=Yes;FMT=Delimited';")
da.SelectCommand = New OleDb.OleDbCommand("Select * from [27 11 16.csv]", cn)
а в результате на выходе имею один столбец не разделенный на столбцы с помощью ';'
почему не происходит разделение на столбцы?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.12.2016, 14:36
Ответы с готовыми решениями:

Как считать дробные, разделённые запятой, из csv с разделителем в виде точки с запятой?
Доброго времени суток. Для решения я пробовал использовать несколько функций. dlmread помогает только тогда, когда дробных чисел...

Из документа .csv необходимо вытащить все наборы букв до запятой и залить в другой файл
Как можно реализовать программу, чтобы из дока .csv, получить все наборы букв до запятой и залить в любой другой текстовый документ? ...

Считать строки из csv файла, все слова заключить в кавычки и разделить запятой. Рез. записать в текстовый файл
Доброго времени суток, столкнулся со следующего рода проблемой, Нужно считать строки из csv файла, все слова заключить в кавычки и...

16
Модератор
Эксперт .NET
 Аватар для Yury Komar
4358 / 3428 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
01.12.2016, 14:49
kritjara, а куда вы хотите вывести эту таблицу, точнее в каком ЭУ вы хотите отобразить данные?
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4358 / 3428 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
01.12.2016, 14:59
kritjara, можно так сделать, заполняя DataGridView
VB.NET
1
2
3
4
5
6
7
8
9
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim CSV() As String = IO.File.ReadAllLines("27 11 16.csv", System.Text.Encoding.Default)
        For Each c In CSV(0).Split(";")
            DataGridView1.Columns.Add(c, c)
        Next
        For i = 1 To CSV.Length - 1
            DataGridView1.Rows.Add(CSV(i).Split(";"))
        Next
    End Sub
Миниатюры
Как прочитать csv файл с разделителем 'точка с запятой'?  
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4358 / 3428 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
01.12.2016, 15:01
тоесть распарсить файл как обычный текст и без всяких ADO
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18291 / 14214 / 5368
Регистрация: 17.03.2014
Сообщений: 28,891
Записей в блоге: 1
01.12.2016, 15:04
kritjara, попробуй такую строку соединения
VB.NET
1
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Администратор\Desktop\; Extended Properties='text;HDR=Yes;FMT=Delimited(;)';"
2
70 / 60 / 16
Регистрация: 22.10.2012
Сообщений: 351
01.12.2016, 15:08  [ТС]
я думал о таком варианте, но как быть если придется редактировать файл? с помощью sql запросов это легче всего
но больше всего меня остерегает то, что столбец может содержать символ ';' и тогда такой вариант окажется ошибочным
0
70 / 60 / 16
Регистрация: 22.10.2012
Сообщений: 351
01.12.2016, 15:15  [ТС]
OwenGlendower, результат такой же
Миниатюры
Как прочитать csv файл с разделителем 'точка с запятой'?  
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4358 / 3428 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
01.12.2016, 15:52
kritjara, если заменить в файле все ";" на "," то все прекрасно грузит...
Видимо всетаки ему нужен файл с разделителем ","
0
70 / 60 / 16
Регистрация: 22.10.2012
Сообщений: 351
01.12.2016, 16:20  [ТС]
Yury Komar, но у меня файл с разделителем ";"
я принимаю этот файл и обрабатываю

меня еще другое смущает, по умолчанию файл открывается с помощью Excel, и открывается нормально ведь

Добавлено через 3 минуты
хаха, если заменить все ";" на "," то уже Excel открывает не правильно, не разделяет
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4358 / 3428 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
01.12.2016, 19:57
kritjara, Провайдеру нужно как-то передать символ разделителя... Системный символ можно получить вот так
VB.NET
1
Dim sep As String = My.Computer.Info.InstalledUICulture.TextInfo.ListSeparator
Excel сохраняет именно с ним по-умолчанию... И Читает так же... А вот Jet незнает ведь, какой разделитель в файле, ему это надо подсказать, но как???

Добавлено через 3 часа 30 минут
kritjara, а по поводу того, что вас смущает...
Если символ ";" стоит то значит он там не случайно? Или могут быть или может уже встречались, моменты, когда в файле CSV были символы в ошибочных местах? Если файл генерирует програмиа какая-то, то думаю это исключено... Нежели пользователь сам его подправит... Поэтому лумаю самы простой и действенный способ - парсить как текст и заполнять в DataTable... Редактироваться будет в таком случае не сложнее, чем через SQL запросы...
Сохранение - так же...
У меня есть пара программ которые именно таким методом их читают, правят и сохраняют... И до сих пор я не встречал CSV файлов, которые были бы косячные...
0
 Аватар для Sklifosofsky
1086 / 916 / 213
Регистрация: 29.09.2015
Сообщений: 1,019
01.12.2016, 20:20
Обычно в CSV если в ячейке присутствует ; то она должна обособляться кавычками, а если еще ковычка внутри есть, то она должна дублироваться (как JavaScript)

"Ячейка1;";Ячейка2;"Ячейка3"""

В Ячейка2 нету зпрещенных знаков, по этому она не обособляется

Вложение 767818

Я к тому что правильно сформированный файл CSV не распарсить при помощи ; если там есть запрещенные знаки

Добавлено через 3 минуты
Надо OleDB ковырять
1
4708 / 3661 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
01.12.2016, 20:46
Указание Delimited в строке подключения говорит лишь о том, что текст с разделителем по умолчанию. Никакой другой разделитель здесь не вставить. Если нужно использовать другой разделитель понадобится дополнительный файл Schema.ini (где то я здесь уже писал на эту тему).
Почему бы просто не считывать строки и не делить их через Split?

Добавлено через 16 минут
См. Диаграмма по данным из файла
2
 Аватар для Sklifosofsky
1086 / 916 / 213
Регистрация: 29.09.2015
Сообщений: 1,019
01.12.2016, 21:20
Лучший ответ Сообщение было отмечено Yury Komar как решение

Решение

ovva дал хорошую подсказку

Нашел пример на C++ форуме
Как подключить .csv через ADO

VB.NET
1
        Dim cn As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Администратор\Desktop\; Extended Properties='text;HDR=Yes;FMT=Delimited;'")
Нужно приложить файл на том же уровне schema.ini

содержание

Code
1
2
3
[Имя файла.csv]
Format=Delimited(;)
DecimalSymbol=.
Добавлено через 9 минут
А это последователям, как сформировать schema.ini детально
https://msdn.microsoft.com/en-... s.85).aspx

Добавлено через 3 минуты
И еще немного
http://aspdotnetcodes.com/Impo... a.ini.aspx
2
Модератор
Эксперт .NET
 Аватар для Yury Komar
4358 / 3428 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
02.12.2016, 02:36
Sklifosofsky, тоже читал про файл Schema.ini, почему-то подумал что его используют только при подключении чере TextDriver(ISAM) если не ошибся с названием...

Добавлено через 2 часа 57 минут
Написал функция загрузки CSV и возврат готовой DataTable, единственный минус, файлы с диска "C" без прав администратора не получится загрузить, так как рядом с CSV файлом временно создается файл Schema.ini.

Еще один минус - данным способом ведь вносить изменения в файл НЕЛЬЗЯ... Только чтение...
Поэтому желание kritjara изменять этот файл через SQL, отвечу скорее всего отрицательно...
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    Public Function GetCSVDataTable(FilePath As String, ColumnSeparator As String, DecimalSeparator As String) As DataTable
        Dim Path = IO.Path.GetDirectoryName(FilePath)
        Dim FileName = IO.Path.GetFileName(FilePath)
        Dim SchemaPath = IO.Path.Combine(Path, "Schema.ini")
        Dim SchemaText = String.Format("[{0}]{3}Format=Delimited({1}){3}DecimalSymbol={2}", FileName, ColumnSeparator, DecimalSeparator, vbCrLf)
        Try
            IO.File.WriteAllText(SchemaPath, SchemaText, System.Text.Encoding.Default)
            Using Conn = New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Path & ";Extended Properties='text;HDR=YES'")
                Dim da As New OleDb.OleDbDataAdapter("Select * from [" & FileName & "]", Conn)
                Dim DT As New DataTable : da.Fill(DT) : Return DT
            End Using
        Catch ex As Exception
            MsgBox(ex.Message.ToArray)
            Return Nothing
        Finally
            IO.File.Delete(SchemaPath)
        End Try
    End Function
 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        DataGridView1.DataSource = GetCSVDataTable(Application.StartupPath & "\File.csv", ";", ".")
    End Sub
2
70 / 60 / 16
Регистрация: 22.10.2012
Сообщений: 351
02.12.2016, 10:33  [ТС]
а если у меня будет отдельная директория для csv файлов, то может просто положить туда schema.ini
он ведь будет как "один для всех", я правильно понял?
а проблему с редактированием буду тогда решать используя DataTable
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4358 / 3428 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
02.12.2016, 10:48
да все верно. файл можно на почтоянку положить в аапку с файламм CSV.

Добавлено через 2 минуты
но если вы внимательно прочитали специфику формата файла - в нем указывается ИМЯ ФАЙЛА для которого данная схема настроена. поэтому вам либо каждый CSV в отдельной папке держать, либо копировать в папку TEMP там создавать Schema.ini и оттуда его читать, а обновлять/сохранять уже в папку откуда брали оригинал...
Только так наверное...
Либо чтоб не мучиться - пускать арограмму от имени администратора

Добавлено через 3 минуты
Честно говоря, яб на вашем месте всетаки воспользоватся способом чтения как текст и разделению на ";"... Чем мучиться с коаировантем, созданиес файлов схемы и так далее... Ведь вы конкретно знаете, как создаются данные файлы? И как они к вам попадают и от кого - все ньюансы можно запрограммировать для этих файлов... и так же создавать DataTable...
0
 Аватар для Sklifosofsky
1086 / 916 / 213
Регистрация: 29.09.2015
Сообщений: 1,019
02.12.2016, 18:53
Цитата Сообщение от Yury Komar Посмотреть сообщение
поэтому вам либо каждый CSV в отдельной папке держать
Не совсем так
Можно все в одном файле расписать. Только придется под каждым наименованием файла писать для него отдельно инструкции

https://www.autoitscript.com/wiki/ADO_Schema.ini
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.12.2016, 18:53
Помогаю со студенческими работами здесь

Как прочитать один столбец из файла с расширением csv
Здравствуйте! Задача такая: есть столбец в файле csv, каждое слово нужно прочитать и сравнить со словом из столбца таблицы базы данных...

В строке имеется одна точка с запятой. Подсчитать количество символов до точки с запятой и после неё
В строке имеется одна точка с запятой. Подсчитать количество символов до точки с запятой и после неё. Заранее большое спасибо!

В строке имеется одна точка с запятой (;). Подсчитать количество символов до точки с запятой и после нее.
В строке имеется одна точка с запятой ( ; ). Подсчитать количество символов до точки с запятой и после нее.

Работа с текстовым файлом-прочитать посимвольно с определенным разделителем строк
Добрый день всем!Вот хочу написать код чтобы он читал байты посимвольно до разделителя строк-";".И этот массив char преобразовал...

Файл содержит символы, слова, целые числа и числа с плавающей запятой. Прочитать из файла и вывести на консоль
Файл содержит символы, слова, целые числа и числа с плавающей запятой. Прочитать из файла и вывести на консоль все данные, тип которых...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru