Модераторы: diadiavova, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сохранить datatable в CSV файл ? 
:(
    Опции темы
Feller
Дата 26.5.2011, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 2.7.2010

Репутация: нет
Всего: нет



Как можна распарсить datatable в таком формате например  column_name=значение; column_name1=значение2; и.т.д  и сохранить это всё в файл bin или txt.  А то Xml слишком большим получается.
PM MAIL   Вверх
diadiavova
Дата 26.5.2011, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Цитата(Feller @  26.5.2011,  20:13 Найти цитируемый пост)
А то Xml слишком большим получается. 

XML - универсальный формат, ты можешь сохранить в него, а потом применить к получившемуся документу преобразование, для этого, надо знать XSLT. В противном случае элементы таблицы придется обходить "ручками", то есть двойной цикл, в одном обходишь строки, в другом - ячейки, и сохраняешь так, как тебе надо. Но это не гибкий способ, я все-таки советовал бы с XSLT.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Feller
Дата 26.5.2011, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 2.7.2010

Репутация: нет
Всего: нет



А как это с XSLT?
PM MAIL   Вверх
diadiavova
Дата 26.5.2011, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Цитата(Feller @  26.5.2011,  20:30 Найти цитируемый пост)
А как это с XSLT? 

Ну вот начать можно отсюда
http://ru.wikipedia.org/wiki/Xslt
Справка по формату есть тут
http://msdn.microsoft.com/ru-ru/library/ms...28VS.90%29.aspx
Вопросы по нему можно задавать тут
http://forum.vingrad.ru/forum/XML-XSL.html
естественно, сначала основы подучить надо, азы разжевывать никто не будет.
Программно преобразование можно выполнить с помощью методов класса
http://msdn.microsoft.com/ru-ru/library/sy...dtransform.aspx


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
diadiavova
Дата 26.5.2011, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Кстати, в твоем случае, если не предполагается дальнейшая обработка сохраненных данных, экспорт в другие форматы и прочие подобные вещи, то возможно и не стоит заморачиваться с XSLT. Единственный совет, не надо в каждой строке писать название столбцов. Если в таблице 3 колонки, то в каждой строке пиши по три значения, и сопоставляй с колонками в порядке следования. В принципе есть такой формат CSV, он так и устроен. Этот формат некоторыми программами поддерживается, даже в экселе потом просмотреть можно, только сохрани с расширением csv.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Feller
Дата 26.5.2011, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 2.7.2010

Репутация: нет
Всего: нет



diadiavova,  Попробывал сделать тестовый примерчик что то он неочень читаемо выглядит 
Код

 Private Sub WriteXML(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles btnSaveXML.Click
        Dim strOut As String
        Dim SaveFile As FileStream
        dtProducts = New NorthwindDataSet.EmployeesDataTable
        dtProducts = AdapterCategories.GetData
        dtProducts.WriteXml("D:\df.csv")
        strOut = Me.txtInputOutput.Text
        SaveFile = _
        File.Create(Application.StartupPath & "\save.csv")
        SFormatter.Serialize(SaveFile, dtProducts)
        MsgBox("Сохранено", MsgBoxStyle.Information, "")
        SaveFile.Close()
    End Sub


Можете свой скинуть а-то я не очень понял как это можна сахранить в csv
PM MAIL   Вверх
diadiavova
Дата 26.5.2011, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Цитата(Feller @  26.5.2011,  22:34 Найти цитируемый пост)
 что то он неочень читаемо выглядит 

А что ты хотел сделать этим примерчиком? smile 

Вот простой вариант
Код

    Sub SaveTableAsCsv(table As DataTable, fileName As String)
        Using sw As New IO.StreamWriter(fileName)
            'Сохраняем заголовки столбцов(если надо естественно)
            sw.WriteLine(String.Join(";", From col As DataColumn In table.Columns Select col.Caption))
            'Сохраняем строки таблицы
            For Each r As DataRow In table.Rows
                sw.WriteLine(String.Join(";", From cell In r.ItemArray Select (cell.ToString)))
            Next
        End Using
    End Sub


Первому параметр метода - сохраняемая таблица, второй - адрес сохранения.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Feller
Дата 27.6.2011, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 2.7.2010

Репутация: нет
Всего: нет



diadiavova, 
Код

 sw.WriteLine(String.Join(";", From cell In r.ItemArray Select (cell.ToString)))

Здесь выдаётся ошибка о невозмоности сконвертировать в String
PM MAIL   Вверх
diadiavova
Дата 27.6.2011, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Цитата(Feller @  27.6.2011,  12:27 Найти цитируемый пост)
Здесь выдаётся ошибка о невозмоности сконвертировать в String 

Что именно невозможно конвертировать? Тут во-первых, все правильно, во-вторых, я попробовал этот пример, прежде чем выложить. Так что если у тебя не получается, то нужно больше информации.

Добавлено через 3 минуты и 47 секунд
Может быть пишет, что невозможно конвертировать в String(). Тогда резонный вопрос: под какой фреймворк пишешь? Если под 3.5, то ясное дело не получится, но о таких вещах предупреждать надо.
Тогда сделай так
Код

 sw.WriteLine(String.Join(";", (From cell In r.ItemArray Select (cell.ToString)).ToArray()))



--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Feller
Дата 29.6.2011, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 2.7.2010

Репутация: нет
Всего: нет



diadiavova, Спасибо , у меня 3.5 фреймворк под него подошло.А как теперь обратно в базу прочитать из файла?
PM MAIL   Вверх
diadiavova
Дата 29.6.2011, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



При помощи IO.File.ReadAllLines прочитаешь строки, а каждую строку дели на на ячейки с помощью String.Split. Как работать с методами смотри в документации по ним. Если файл большой и сразу грузить его в память нецелесообразно, то можно воспользоваться IO.StreamReader. С его помощью тоже можно читать файл построчно в цикле.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума VB .NET
diadiavova
  • Прежде чем задать вопрос, воспользуйтесь поиском: возможно Ваш вопрос уже обсуждался и на него был получен ответ.
  • Если такой же вопрос не найден, не стоит задавать свой вопрос в любую тему, создайте новую.
  • Заголовок темы должен отображать ее суть.
  • Содержание поста должно описывать проблему понятно, но в то же время, по возможности, лаконично. Сначала следует описать суть вопроса, потом можно привести пример кода, не вынуждайте других участников угадывать в чем Ваша проблема - телепатов здесь нет.
  • Будьте взаимно вежливы и дружелюбны.
  • При оформлении сообщений используйте форматирование, примеры кода заключайте в теги [CODE=vbnet][/CODE].
  • Также ознакомьтесь с общими правилами, действующими на всем форуме.
  • Если вопрос решен, не забывайте помечать тему решенной(вверху темы есть ссылка). Кроме того, если Вы хотите отблагодарить участников, оказавших помощь в решении, можно повысить им репутацию, в случае, если у Вас менее 100 сообщений в форуме и функция изменения репутации Вам недоступна, можете написать сюда.
  • Общие вопросы по программированию на платформе .NET обсуждаются здесь.
  • Литература по VB .NET обсуждается здесь.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0512 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.