С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/25: Рейтинг темы: голосов - 25, средняя оценка - 4.96
0 / 0 / 0
Регистрация: 01.12.2011
Сообщений: 14
1

Чтение из xml, запись в csv

01.12.2011, 02:38. Показов 4552. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, товарищи, помогите разобраться с несколькими проблемами.
Нужно написать программку, вытаскивающую нужную инфу из xml файлика + запись результатов в csv файл. Собственно программку то я кое как написал, но столкнулся с некоторыми проблемами:
1) Не хочет читать русские символы из xml файла (гуглил, но видимо руки кривые, не нашел), вылетает с ошибкой на первом же русском символе
2) При записи в csv файл через каждое слово идет пустая строка, не пойму как убрать
3) Надоумте как сделать так чтобы при записи в файл citiesFrom писалось в первый столбец, citiesWhere во второй, и т.д. (находил инфу что надо добавить разделители вида \t , но не помогло)
XmlReader
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
private void button1_Click(object sender, EventArgs e)
        {      
            List<String> citiesFrom = new List<String>();
            List<String> citiesWhere = new List<String>();
            List<String> cost = new List<String>();
            XmlTextReader reader = new XmlTextReader("c://filename.xml");
            citiesFrom.Clear();
            citiesWhere.Clear();
            cost.Clear();
            using (StreamWriter file = new StreamWriter("Report.csv", false, Encoding.GetEncoding(1251)))
            {
                while (reader.Read())
                {
                    if ((reader.NodeType == XmlNodeType.Element) && (reader.Name == "From"))
                    {
                        reader.Read();
                        citiesFrom.Add(reader.Value);
                    }
 
                    if ((reader.NodeType == XmlNodeType.Element) && (reader.Name == "Where"))
                    {
                        reader.Read();
                        citiesWhere.Add(reader.Value);
                    }
 
                    if ((reader.NodeType == XmlNodeType.Element) && (reader.Name == "Cost"))
                    {
                        reader.Read();
                        cost.Add(reader.Value);
                    }
 
                }
         
                for (int i = 0; i < citiesFrom.Count; i++)
                {
                    file.Write(citiesFrom[i] + ';');      
                }
                for (int i = 0; i < citiesWhere.Count; i++)
                {
                    file.Write(citiesWhere[i] + ';');
                }
                for (int i = 0; i < cost.Count; i++)
                {
                    file.Write(cost[i] + ';');
                }
            }
            listBox1.DataSource = citiesFrom;
            listBox2.DataSource = citiesWhere;
            listBox3.DataSource = cost;
        }
    }
}

Прилагаю тестовый xml файлик на всякий случай, тут без русских символов , но в том файле что должна читать программа они есть.
XML
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<Ticket>
<From>
Moscow
</From>
<Where>
Berlin
</Where>
<mustnotbeshown>
LoL
</mustnotbeshown>
<mustnotbeshown1>
LoL
</mustnotbeshown1>
<mustnotbeshown1>
LoL
</mustnotbeshown1>
<mustnotbeshown1>
LoL
</mustnotbeshown1>
<mustnotbeshown1>
LoL
</mustnotbeshown1>
<mustnotbeshown1>
LoL
</mustnotbeshown1>
<mustnotbeshown2>
LoL
</mustnotbeshown2>
<Cost>
8000
</Cost>
<From>
New York
</From>
<Where>
Tokio
</Where>
<mustnotbeshown>
LoL
</mustnotbeshown>
<Cost>
9500
</Cost>
<From>
Washington
</From>
<Where>
St.Petersburg
</Where>
<Cost>
11000
</Cost>
<From>
Paris
</From>
<Where>
London
</Where>
<Cost>
4000
</Cost>
</Ticket>
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.12.2011, 02:38
Ответы с готовыми решениями:

Запись/чтение CSV
Приветствую всех. есть файл *.csv у него несколько особенностей 1. заранее неизвестно кол-во...

Чтение и запись нужной строки в csv с DictReader
Добрый день Прочитал csv файл и надо удалить конкретное поле и записать csv обратно. Как...

Чтение запись файлов *.csv больших размеров
Доброго времени суток, форумчане! Нужно сделать: • прочитать данные таймсерий из файла...

Чтение и запись xml
Здравствуйте. Есть .xml файлик, в котором есть один параметр. &lt;?xml version=&quot;1.0&quot;...

9
Эксперт .NET
17793 / 12944 / 3381
Регистрация: 17.09.2011
Сообщений: 21,226
01.12.2011, 03:04 2
Цитата Сообщение от iDreamer Посмотреть сообщение
Не хочет читать русские символы из xml файла
В какой кодировке сохранен файл?

Цитата Сообщение от iDreamer Посмотреть сообщение
При записи в csv файл через каждое слово идет пустая строка
Проверьте, может после каждого значения в XML файле стоит символ \r\n

Цитата Сообщение от iDreamer Посмотреть сообщение
как сделать так чтобы при записи в файл citiesFrom писалось в первый столбец, citiesWhere во второй, и т.д.
C#
1
file.WriteLine("{0}\t{1}\t{2}", citiesFrom[i], citiesWhere[i], cost[i]);
0
0 / 0 / 0
Регистрация: 01.12.2011
Сообщений: 14
01.12.2011, 19:27  [ТС] 3
Цитата Сообщение от kolorotur Посмотреть сообщение
В какой кодировке сохранен файл?
В 7-bit ASCII если верить нотпаду++ и вот этому декодеру от Лебедева (http://web.artlebedev.ru/tools/decoder/)

Цитата Сообщение от kolorotur Посмотреть сообщение
Проверьте, может после каждого значения в XML файле стоит символ \r\n
Да, вероятно \r\n действительно стоит после каждого значения, как точно проверить это я к сожалению не знаю=( Проверил вывев в richTextBox , также с пустыми строками выводит

Цитата Сообщение от kolorotur Посмотреть сообщение
C#
1
file.WriteLine("{0}\t{1}\t{2}", citiesFrom[i], citiesWhere[i], cost[i]);
Спасибо, но ничего не изменилось, абсолютно также выводит в один столбец
Заменил последние 3 цикла на
C#
1
2
3
4
    for (int i = 0; i < citiesFrom.Count; i++)
                {
                    file.WriteLine("{0}\t{1}\t{2}", citiesFrom[i], citiesWhere[i], cost[i]);    
                }
Добавлено через 16 часов 1 минуту
апну пожалуй
0
6287 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
01.12.2011, 19:31 4
iDreamer, пересохраните в utf8.
0
0 / 0 / 0
Регистрация: 01.12.2011
Сообщений: 14
01.12.2011, 20:22  [ТС] 5
Так , спасибо, со всем вроде разобрался... Сам наставил энтеров в xml'ке и удивляюсь что не работает =)

По поводу записи в несколько столбцов в csv:
C#
1
 file.WriteLine("{0}\t{1}\t{2}", citiesFrom[i] + ';', citiesWhere[i] + ';', cost[i] + ';');
Может поможет кому.

Темку наверное можно закрывать
0
Эксперт .NET
17793 / 12944 / 3381
Регистрация: 17.09.2011
Сообщений: 21,226
01.12.2011, 22:12 6
Цитата Сообщение от iDreamer Посмотреть сообщение
C#
1
file.WriteLine("{0}\t{1}\t{2}", citiesFrom[i] + ';', citiesWhere[i] + ';', cost[i] + ';');
Зачем там табы, если это csv?

C#
1
file.WriteLine("{0};{1};{2}", citiesFrom[i], citiesWhere[i], cost[i]);
0
10 / 10 / 5
Регистрация: 20.04.2014
Сообщений: 161
15.07.2015, 16:59 7
kolorotur, не подскажите почему может "разкидывать" сторчку,например, "Article__c asda" на 2 ячейки.1 переменная разделенная ";".
C#
1
2
3
4
  StreamWriter csvsw = new StreamWriter(csv, true, System.Text.Encoding.GetEncoding(1251));
                csvsw.WriteLine("Article__c asda;ArticleType;Channel;Language;Title;UrlName;");
        
                csvsw.Close();
0
Эксперт .NET
17793 / 12944 / 3381
Регистрация: 17.09.2011
Сообщений: 21,226
15.07.2015, 17:19 8
Salems, зависит от считывающего софта.
Попробуйте первое значение кавычками обложить:
C#
1
csvsw.WriteLine("\"Article__c asda\";ArticleType;Channel;Language;Title;UrlName;");
1
10 / 10 / 5
Регистрация: 20.04.2014
Сообщений: 161
16.07.2015, 12:24 9
kolorotur, да помогло.спасибо

Добавлено через 16 часов 9 минут
kolorotur, и еще вопрос,если не сложно, как разделитель, например, ";" заэскейпить внутри текста? сажал символ в кавычки,не помогает.

Добавлено через 34 минуты
kolorotur, собственно если заменить символ в тексте,все нормально. Сажаю его в кавычки, слэш-кавычки не помогает(

Добавлено через 2 часа 5 минут
попробовал к переменной приделать "\"",т.е. ее саму посадить в кавычки, вывод в файл странный получился, выводит кусок данного сообщения,а остальные переменные не выводятся.
0
Эксперт .NET
17793 / 12944 / 3381
Регистрация: 17.09.2011
Сообщений: 21,226
16.07.2015, 14:38 10
Цитата Сообщение от Salems Посмотреть сообщение
как разделитель, например, ";" заэскейпить внутри текста?
Так же — все поле оборачивайте в кавычки, нормальный парсер его обработает должным образом:
C#
1
string csv = "1;2;3;\"text with ; separator\";4"
0
16.07.2015, 14:38
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.07.2015, 14:38
Помогаю со студенческими работами здесь

Запись и чтение XML
Нужно сохранить в XML файл объект класса CPolygon, через saveFileDialog. Как это можно сделать?...

Чтение и запись XML
Здравствуйте всем. Интересует вопрос чтения и записи XML Есть какой-то набор данных: name=Маша...

Чтение и запись в xml
Встала такая задача. Нужно написать два метода для чтения данных из xml файла и записи в него, т.е....

Чтение и запись XML
Здравствуйте! Допустим есть сущностный бин, который с помощью JPA обращается к БД с запросом....


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
Полезные поделки на Arduino, которые можно сделать самому
raxper 06.01.2025
Arduino как платформа для творчества Arduino представляет собой удивительную платформу для технического творчества, которая открывает безграничные возможности для создания уникальных проектов. Эта. . .
Подборка решений задач на Python
IT_Exp 06.01.2025
Целью данной подборки является предоставление возможности ознакомиться с различными задачами и их решениями на Python, что может быть полезно как для начинающих, так и для опытных программистов. . . .
С чего начать программировать микроконтроллер­­ы
raxper 06.01.2025
Введение в мир микроконтроллеров Микроконтроллеры стали неотъемлемой частью современного мира, окружая нас повсюду: от простых бытовых приборов до сложных промышленных систем. Эти маленькие. . .
Из чего собрать игровой компьютер
inter-admin 06.01.2025
Сборка игрового компьютера требует особого внимания к выбору комплектующих и их совместимости. Правильно собранный игровой ПК не только обеспечивает комфортный геймплей в современных играх, но и. . .
Обновление сайта www.historian.b­y
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
Модель полного двоичного сумматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list): s=^y] p=x and y for i in range(1,len(x)): s. append((x^y)^p) p=(x and y)or(p and (x or y)) return s x=list() y=list()
Это мы не проходили, это нам не задавали...(аси­­­­­­­­­­­­­­­­­­­­­­­­­­х­р­о­н­­н­­­ы­­й счётчик с управляющим сигналом зад
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru