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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получение текстового файла в webBrowser по строкам 
:(
    Опции темы
Алексеу
Дата 7.1.2009, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Собственно, такой вопрос - полечение текстового файла в webBrowser по строкам.

Есть текстовый файл, с помощью webBrowser.DocumentText перегоняется в строку. В этой строке нужно искать определенную информацию, но сталкиваюсь с интересной проблемой - все данные идут одной строкой, поэтому если в файле мне нужно будет найти то место где, к примеру, на одной строке написана буква "о", то выполнив поиск в одной строке мне вполне может вернуться результат, где будут буквы, к примеру "по", но по задумке нужен поиск именно по строкам.

Не знаете как можно с помощью webBrowser обращатся к текстовым файлам, считывая их в массив string, как, к примеру, делает функция File.ReadAllLines? В этом случае проверив строку из массива была бы гарантия отсутствия ошибок поиска.

Заранее спасибо
PM MAIL   Вверх
nagg
Дата 7.1.2009, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Не совсем понял, что вы хотите сделать  smile 
но быть может вам стоит просто поработать с этой строкой (например, разделить её в string[] через split)

ну или может такое поможет (сомневаюсь):

Код

List<string> list = new List<string>();
StreamReader sr = new StreamReader(webBrowser1.DocumentStream);
while (!sr.EndOfStream)
      list.Add(sr.ReadLine());

--------------------
I am the State...
PM MAIL WWW ICQ Skype   Вверх
diadiavova
Дата 8.1.2009, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Масса способов, но предложу самое простое. 
Из текеста наджо сформировать простейший HTML документ. Допустин надо отобразить текст находящийся в переменной srcText

Код

srcTex= "<html><body><pre>" + srcText + "</pre></body></html>"


И только после этого передавать текст броузеру. Должно сработать

Добавлено через 4 минуты и 1 секунду
Кстати: проблемы могут возникнуть, если текст содержит символы разметки хтмл (<> итп), об этом надо заранее позаботиться, хотя есть и другие способы, не поможет - пиши.


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


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


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

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



Сейчас посмотрел, оказывается есть более прямой способ сделать всё без проблем.

Код

HtmlDocumen doc = webbrowser1.OpenNew(true);
doc.Write("<pre>" + srcText "</pre>");


Это сообщение отредактировал(а) diadiavova - 8.1.2009, 15:45


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


Шустрый
*


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

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



diadiavova, проблема в обратном - не мы должны передавать текстовый файл, а по http из нета загружается с сайта в веб браузер содержимое текстового файла, и с этим содержимым нужно работать...
PM MAIL   Вверх
diadiavova
Дата 9.1.2009, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Это почему ещё "в обратном"? Не имеет значения откуда загружен текст, после загрузки передай его в переменную srcText и зделай как я написал. А ещё лучше так:

Код

HtmlDocumen doc = webbrowser1.OpenNew(true);
doc.Write("<pre id='content'></pre>");
HtmlElement el = doc.GetElementById("content");
el.InnerText = srcText;//здесь текст, который надо вставить.


Это сообщение отредактировал(а) diadiavova - 9.1.2009, 12:03


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


Шустрый
*


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

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



diadiavova, речь идет не о HTML файле, а о текстовом, как было указано вначале.

Самый банальный пример - роботс на Яндексе http://www.yandex.ru/robots.txt 

Этот документ не содержит форматирования HTML, но если считать его с DocumentText то получится бред. Можно ли, скажем, этот же файл считать так, чтобы он представлял собой массив строк по одной?
PM MAIL   Вверх
diadiavova
Дата 9.1.2009, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Я прекрасно понял о чём ты.Ты в моих примерах видел где-нибудь DocumentText? Не проще ли попробовать то, что я предложил?

Добавлено @ 19:19
А если надо, чтобы было как в ссылке, просто сохрани свой текст во временный файл с расширением txt и загрузи его оттуда.

Это сообщение отредактировал(а) diadiavova - 9.1.2009, 19:20


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


Шустрый
*


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

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



Получаю все это в через

HtmlDocument htmld = webBrowser1.Document.OpenNew(true);

но дальше использовать без понятия как в том смысле чтобы обработать сам текст (разметки в файле нет вообще).

А если как Вы говорите сохранять все что отображается в браузере в текстовый файл, а затем считать оттуда, то как это реализовать?
PM MAIL   Вверх
diadiavova
Дата 14.1.2009, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Алексеу @  14.1.2009,  12:01 Найти цитируемый пост)
сохранять все что отображается в браузере в текстовый файл, а затем считать оттуда, то как это реализовать? 

Код

System.IO.File.WriteAllText("temp.txt", srcText);
webBrowser1.Navigate("temp.txt");

temp.txt - имя временного файла, srcText - переменная с текстом, который надо отобразить. Но ещё раз повторюсь: лучше сделай как в последнем примере.



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


Шустрый
*


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

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



Вероятно все же не поняли друг друга.

Как Вы пишете 

Код

webBrowser1.Navigate("temp.txt");


это значит отображение текстового файла в браузере - т.е. переход на него.
А нужно все наоборот сделать - браузер переходит по какому-то адресу http, который содержит текстовый файл без тегов ХТМЛ, мы получаем из него данные в виде 1 строка в файле = 1 строка в массиве строк.

Тот пример, который Вы привели скорее предназначен для обратного.
PM MAIL   Вверх
diadiavova
Дата 14.1.2009, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Пардон - пропёрся. Эта задача  - обратная, стало быть и решать её надо обратным способом.
Для начала немного объясню как отображаются в броузере файлы не хтмловского формата. На самом деле они просто тупо преобразовываются в хтмл. Можно взять за основу ту ссылку, которую ты дал и посмотреть, что выдаст броузер.
Код

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=windows-1251"></HEAD>
<BODY><PRE>User-agent: *
Disallow: /?
Disallow: /404.html
Disallow: /about.html
Disallow: /advanced_engl.html
Disallow: /advertising
Disallow: /articles
Disallow: /chisla.html
Disallow: /cgi-bin/
Disallow: /cgi/
Disallow: /cy
Disallow: /dzen.html
Disallow: /i/
Disallow: /ie3/yandsearch
Disallow: /keyboard_qwerty.html
Disallow: /logotypes
Disallow: /norobot
Disallow: /polling
Disallow: /redir
Disallow: /regions.html?
Disallow: /s/
Disallow: /setup
Disallow: /skazki
Disallow: /subscribe/confirm.pl
Disallow: /subscribe/view.pl
Disallow: /yaca
Disallow: /ya
Disallow: /yandsearch
</PRE></BODY></HTML>



Как видиш помимо отображаемого текста имеется ещё и разметка. То же самое произойдёт с XML документом при загрузке в броузер. Прочитав его ты обнаружишь хтмл документ с кучей скриптов.

Теперь о том, как я получил этот код

Код

         System.IO.StreamReader sr = new System.IO.StreamReader(this.webBrowser1.DocumentStream); 
         textVariable = sr.ReadToEnd();
         sr.Close();


Тебя, по всей видимости, интересует, как получить то же самое, без хтмл разметки. Зная структуру документа это совсем не сложно.

Код

textVariable = webBrowser1.Document.GetElementsByTagName("PRE")[0].InnerText;


textVariable - это переменная, которой передаётся текст.


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


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


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

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



Да, кстати: попробуй сделать ещё так
Код

            System.Net.WebClient wc = new System.Net.WebClient();
            System.IO.StreamReader sr = new System.IO.StreamReader(wc.OpenRead("http://www.yandex.ru/robots.txt"));
            textVariable1 = sr.ReadLine();//читает первую строку текста
            textVariable2 = sr.ReadLine();//читает вторую строку текста и т. д.
            sr.Close();

способ, куда более прямой.

Это сообщение отредактировал(а) diadiavova - 14.1.2009, 14:41


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


Шустрый
*


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

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



diadiavova, благодарю за подсказку! Так считало  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


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

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


 




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


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

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