Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
8 / 8 / 2
Регистрация: 14.06.2011
Сообщений: 115

Из StreamReader в TextReader

11.07.2011, 11:25. Показов 3418. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Стоит такая задача: есть поток StreamReader. Подразумевается, что в нём лежит xml-ник + в самом конце две ненужных текстовых строки (пустая и случайная). Хml-ник каждый раз состоит из разного количество строк. Нужно откусить из потока StreamReader ТОЛЬКО ту часть, которая содержит xml-ник и затем загрузить её в объект XmlDocument Пытаюсь сделать что-то вроде:
C#
1
2
3
4
5
6
7
8
TextReader tr;
StreamReader st;
XmlDocument xml = new XmlDocument();
 
...
 
tr = st;
xml.Load(tr);
При исполнении xml.Load(tr); возникает ошибка, что n-ая строка не может быть прочитана. Оно и понятно, в tr сидят не нужные мне строки. Как мне это обойти?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.07.2011, 11:25
Ответы с готовыми решениями:

Метод Peek() класс TextReader
В msdn сказано: "Целое число, представляющее следующий символ, чтение которого необходимо выполнить, или значение -1, если доступных...

Чтение из закрытого TextReader невозможно
class Global { static public int MAX_SKILL; static public StreamReader fp; } class TableSave { static...

Чтение из закрытого TextReader невозможно
каждая строка в файле, начиная с 4, разбивается в массив. мне требуется удалить всю строку (либо все элементы массива) если 0 элемент...

6
615 / 539 / 115
Регистрация: 24.03.2011
Сообщений: 576
11.07.2011, 11:54
C#
1
2
3
4
5
6
7
8
  string[] s = File.ReadAllLines("file.xml");
 
  StringBuilder s2 = new StringBuilder();
  for (int i = 0; i < s.Length - 2; i++)
      s2.AppendLine(s[i]);
 
  XmlDocument xml = new XmlDocument();
  xml.LoadXml(s2.ToString());
0
8 / 8 / 2
Регистрация: 14.06.2011
Сообщений: 115
11.07.2011, 12:22  [ТС]
Причём здесь загрузка из файла вообще? У меня есть поток данных из другой программы. Просто данные такие, что подразумевается, что среди строк там есть xml-ник
0
615 / 539 / 115
Регистрация: 24.03.2011
Сообщений: 576
11.07.2011, 13:21
тогда так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
            StreamReader st;
 
            List<string> s = new List<string>();
            bool b = false;
            string line;
 
            while ((line = st.ReadLine()) != null)
            {
                if (line.Contains("<?xml version") | b == true)
                {
                    s.Add(line);
                    b = true;
                }
            }
 
            StringBuilder s2 = new StringBuilder();
            for (int i = 0; i < s.Count - 2; i++)
                s2.AppendLine(s[i]);
 
            XmlDocument xml = new XmlDocument();
            xml.LoadXml(s2.ToString());
0
8 / 8 / 2
Регистрация: 14.06.2011
Сообщений: 115
11.07.2011, 14:13  [ТС]
Спасибо за предложенное решение. Я тоже придумал как пройти дальше, но теперь при загрузке в Xml получаю ошибку Illegal characters in path.

Добавлено через 2 минуты
В общем я пока решил выгружать данные в xml из первой программы в файл. Благ там есть соответствующий функционал. А в свою прогу Xml-ник брать из файла
0
9 / 9 / 4
Регистрация: 23.05.2011
Сообщений: 15
11.07.2011, 23:57
Цитата Сообщение от McKay Посмотреть сообщение
в самом конце две ненужных текстовых строки (пустая и случайная)
Если случайная строка не содержит символа ">", то можно попробовать так:
C#
1
2
3
4
5
6
7
8
            StreamReader st ;
            string str = st.ReadToEnd();
            int start = str.IndexOf("<?xml version");
            int end = str.LastIndexOf(">")+1;
            str = str.Substring(start, end - start);
 
            XmlDocument xml = new XmlDocument();
            xml.LoadXml(str);
0
8 / 8 / 2
Регистрация: 14.06.2011
Сообщений: 115
12.07.2011, 13:24  [ТС]
Содержит. Не хочет у меня загружаться в xml ни из stringBuilder, ни через ReadToEnd(). Всё время либо ошибка, что передаваемая строка содержит некорректные знаки, либо, что то, что передаётся переполнено. Т.е. типа много стараюсь запихнуть в передаваемую строку. Но если тупо показать саму строку на экране, то она-то как раз ПОЛНОСТЬЮ! содержит нужный мне xml-ник, какой бы он ни был (вообще там количество символов кратное примерно 3000)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.07.2011, 13:24
Помогаю со студенческими работами здесь

Чтение из закрытого TextReader невозможно
while (sr.EndOfStream) { string tmp = sr.ReadLine(); stringxy= tmp.Split('/'); ...

Чтение из закрытого TextReader невозможно.Что не так я делаю?
У меня есть кнопка по нажатию на которую должны обновиться слова в словаре Dictionary Вот код if (richTextBox1.Text != &quot;&quot;)...

StreamREader
подскажите пожалуйста,как в строковый(уже содержащий строки) поток добавить строковую переменную?

StreamReader
Как указать стримридеру где показывать текст из файла?

Свой StreamReader
StreamReader (собственного производства) лучше реализовать на основе стека? И что надо знать для того, чтобы написать свой StreamReader? ...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Программный отбор значения справочника
Maks 21.03.2026
Процедура ВодителиНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка) / / Отключаем стандартную обработку (стандартное открытие формы выбора без фильтров) . . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru