Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование в среде .NET (ASP.NET,ADO.NET) на C#/VB.NET

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162

Открыть новую тему     Написать ответ в эту тему

moverast



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Andryshok
полностью с тобой согласен, просто это первое разочарование после кучи радости от того как прекрасен и удобен C# отказываться я от него не буду)))

Всего записей: 589 | Зарегистр. 26-11-2007 | Отправлено: 12:29 19-04-2011
ForposT_ForeveR



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Здравствуйте.
Работаю с xml в C#. Данный xml в кодировки ANSI.
XmlTextReader reader = new XmlTextReader(@"D:\a.xml");
while (reader.Read())
{
if (reader.Name == "Квалификация")
label1.Text = reader.GetAttribute("Название");
}
В итоге ничего не выводит.
Думаю, что это проблемы с кодировкой. Ибо в xml'ке есть строка <Квалификация Название="начальник"/></Квалификация>
Насколько я понял, код программы в C# пишется в кодировке UTF-16.
Как быть?

Всего записей: 525 | Зарегистр. 11-12-2004 | Отправлено: 16:23 19-04-2011
Mextrom



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ForposT_ForeveR
Пробовали задавать в загловке xml файла его кодировку? например,
Код:
<?xml version="1.0" encoding="windows-1251"?>

Всего записей: 854 | Зарегистр. 30-03-2005 | Отправлено: 17:42 19-04-2011
ForposT_ForeveR



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
В xml'e всё именно так как Вы написали.

Всего записей: 525 | Зарегистр. 11-12-2004 | Отправлено: 17:43 19-04-2011
Mextrom



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ForposT_ForeveR
Вопрос такой, этот фрагмент
Код:
<Квалификация Название="начальник"/></Квалификация>  
вы привели в точности? здесь у вас два закрывающих тэга.
а вообще мне кажется вам просто нужно выйти из цикла после первого нахождения нужного элемента, т.е.
Код:
while (reader.Read())
            {
                if (reader.Name == "Квалификация")
                {
                    label1.Text = reader.GetAttribute("Название");
                    break;
                }
            }
Дело в том, что при наличии закрывающего тэга </Квалификация> условие reader.Name == "Квалификация" тоже выполняется, но атрибута у этого элемента нет . В итоге после первого выполнения условия текст выставляется правильно (элемент <Квалификация Название="начальник">), а после второго текст выставляется в null (элемент </Квалификация>). Поэтому либо выходите из цикла сразу, либо используйте только такие тэги <Квалификация Название="начальник"/>.
 
Или можно условие расширить
Код:
if (reader.Name == "Квалификация" && reader.HasAttributes)

Всего записей: 854 | Зарегистр. 30-03-2005 | Отправлено: 21:09 19-04-2011 | Исправлено: Mextrom, 21:15 19-04-2011
amr_now



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Народ,  
помогите, пожалуйста, выбрать перечень файлов с несколькими расширениями из папки.
 
Пока получился вариант с костылями, но хотелось бы красивее:
        Dim ИзФормата As String
        Dim fo = New String() {}
        Dim fo1 = New String() {}
        Dim foCount As Integer = 0
        Dim ВходящаяПапка As String
 
            Dim folderBrowserDialog1 As New System.Windows.Forms.FolderBrowserDialog()
            folderBrowserDialog1.Description = "Выбор целой папки для конвертирования"
            folderBrowserDialog1.ShowNewFolderButton = False
            If folderBrowserDialog1.ShowDialog() <> System.Windows.Forms.DialogResult.OK Then Exit Sub
            ВходящаяПапка = folderBrowserDialog1.SelectedPath
            n = 0
            For i = 1 To elements(ИзФормата) 'Количество расширений в строковой переменной  
                fo1 = My.Computer.FileSystem.GetFiles(ВходящаяПапка, FileIO.SearchOption.SearchTopLevelOnly, "*." + elementAt(ИзФормата, i - 1)).ToArray
                ReDim Preserve fo(foCount + fo1.Length - 1)
                For j = 1 To fo1.Length
                    fo(foCount + j - 1) = fo1(j - 1)
                Next
                foCount += fo1.Length
            Next

Всего записей: 8604 | Зарегистр. 30-06-2006 | Отправлено: 07:41 20-04-2011
ForposT_ForeveR



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Здравствуйте.
У меня есть XML файл:

Цитата:
<XML .../>
<MAIN/>
<Table1/>
<Tag tochonado="*a1*"/> </Tag>
<Tag tochonado="*a2*"/> </Tag>
<Tag tochonado="*a3*"/> </Tag>
<Tag tochonado="*a0*"/> </Tag>
<Tag tochonado="*a0*"/> </Tag>
</Table1>
<Tag vsyachina="i tut vsyachina"/></Tag>
</MAIN>
</XML>

Необходимо спарсить значение атрибута "tochtonado" тега "Tag", причём нужно всё кроме того, что содержит a0.
Однако, в данном XML файле имеется тег "Tag" в двух местах. Нужен именно тот, который в теге "Table1". Хочу заметить, что в только в искомом теге есть атирибут "tochtonado".
 
Второй вопрос.
Подскажите, пожалуйста, как узнать у данного тега есть атрибут "attr1"?

Всего записей: 525 | Зарегистр. 11-12-2004 | Отправлено: 21:14 20-04-2011
Molniev

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
amr_now, VB практически не знаю, но насколко понял, вы проводите контекацию строки с перечислением?
Почему нельзя сделать самому: перечислить все файлы в папке, и для каждого выполнить сравнение с вашими критериями (расширинием). Совпадает - добавить в список/сделать что-там-надо. несовпадает - пропустить.
 
Добавлено:
ForposT_ForeveR, штатными средствами для работы с XML для вашего фрагмента никак.
При загрузке дотнет неслабо обламает ошибками о неправильном xml.
Нечто такое он загрузит:

Код:
<?xml version="1.0" encoding="windows-1251"?>
 <main>  
 <table1>  
 <tag tochonado="*a1*"> </tag>  
 <tag tochonado="*a2*"> </tag>  
 <tag tochonado="*a3*"> </tag>  
 <tag tochonado="*a0*"> </tag>  
 <tag tochonado="*a0*"> </tag>  
 </table1>  
 <tag vsyachina="i tut vsyachina"></tag>  
 </main>

Ошибки: 1. Дотнет регистр букв учитывает вообщето. Поэтому для нормально работы лучше следовать общепринятым правилам и писать в нижнем регистре. 2. <Tag tochonado="*a0*"/> </Tag> - дважды закрывать тег это ошибка. 3 <MAIN/> <Table1/> - Это типа открываеться тег?  
http://ru.wikipedia.org/wiki/XML - прочтите хотя бы википедию!
 
А для того что вы хотите, относительно правильно сформированного фрагмента я обычно практикую XPath. Код такой:

Код:
 
using System.Xml;
using System.Xml.XPath;
using System.IO;
 
        private void button1_Click(object sender, EventArgs e)
        {
            XPathDocument doc = new XPathDocument(@"D:\xml.xml");
            XPathNodeIterator nodes = null;
 
            nodes = doc.CreateNavigator().Select("main/table1/tag");
            while (nodes.MoveNext())
            {
                richTextBox1.AppendText(nodes.Current.GetAttribute("tochonado", "") + Environment.NewLine);                
            }
        }
 

Если добавите на форму кнопку и richTexBox - увидите содержимое атрибутов.
Подробности: http://wladm.narod.ru/C_Sharp/xml001.html#5 и на английском у первоисточника - http://msdn.microsoft.com/en-us/library/ms256115.aspx. Вещь мошная и удобная.
 

Цитата:
Подскажите, пожалуйста, как узнать у данного тега есть атрибут "attr1"?

Посмотреть в msdn, что такое HasAttributes: HasAttributes. 1,4,5,6,7,12,14.... и так далее ссылки.
 
А лучшим решением будет немаяться дурью, а прочитать учебник: http://msdn.microsoft.com/ru-ru/beginner/ee344863.aspx, он конечно для вундеркиндов, но написано хорошо и по русски.

Всего записей: 176 | Зарегистр. 13-03-2008 | Отправлено: 22:16 20-04-2011
ForposT_ForeveR



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
что такое HasAttributes

До данной функции докапался. Но как узнать иметь ли данный тег конкретный атрибут - так и не понял. Пробовал по GetAttribute("AttrName") и затем производить какие-либо манипуляции со строкой, подсчет символов или другие действия - пишет что ссылаюсь на несуществующий объект.

Всего записей: 525 | Зарегистр. 11-12-2004 | Отправлено: 23:10 20-04-2011
BlackVetal



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ForposT_ForeveR
Тебе вроде уже Molniev написал как получить атрибут

Цитата:
nodes.Current.GetAttribute("tochonado", "")

 
amr_now
попробуй перечислить в шаблоне поиска нужные варианты через точку с запятой - вроде так должно работать

Всего записей: 1094 | Зарегистр. 13-11-2005 | Отправлено: 06:45 21-04-2011 | Исправлено: BlackVetal, 07:00 21-04-2011
Mextrom



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ForposT_ForeveR

Цитата:
конкретный атрибут

Если атрибута нет, то GetAttribute("AttrName") вернёт null. Т.е. проверив результат на null, вы узнаете, есть атрибут или нет. Судя по всему, именно в этом случае вы и получаете
Цитата:
пишет что ссылаюсь на несуществующий объект

Всего записей: 854 | Зарегистр. 30-03-2005 | Отправлено: 08:45 21-04-2011
Molniev

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ForposT_ForeveR, Как совершенно правильно заметил уважаемый Mextrom, если атрубита нет то GetAttribute() возвращает null. И обращаться к такому объекту соответственно нельзя ибо нету его.

Цитата:
До данной функции докапался. Но как узнать иметь ли данный тег конкретный атрибут - так и не понял

Что же до "данный" ... nodes.Current ... в while (nodes.MoveNext()) - это и есть "данный тег". А то потом ещё раз возникнет необходимость сделать с ним что-то)).
 

Всего записей: 176 | Зарегистр. 13-03-2008 | Отправлено: 18:58 21-04-2011 | Исправлено: Molniev, 18:59 21-04-2011
moJoKras



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Всем привет! Подскажите, пожалуйста, кто знает.
 
1. Есть в дотнете что-нибудь похожее на слои рисования? Объясню ситуацию - задание связано с множествами точек, нужно найти особый треугольник из этих точек. Собственно, мышкой расставляю точки и потом ищу треугольник. После его нахождения, если ставлю ещё точку, то стороны треугольника надо стереть. Сейчас делаю так: если надо поставить одну точку, то
Graphics g = this.CreateGraphics();
g.DrawEllipse..., если надо что-то очистить, то this.Refresh(), и всё с нуля рисую.
Может есть решения поэлегантней, чтобы можно было очистить только лишь слой (т.е. например точки одного множества, или стороны треугольника)?
2. В классе основной формы есть объект класса, наследуемого от Panel. В нём никак не могу отловить нажатие клавиш (ни KeyUp, ни KeyDown, ни KeyPress), пришлось отлавливать его в основной форме и вызывать спец. метод у панели. Пробовал KeyPreview = true, не помогает.

Всего записей: 1136 | Зарегистр. 14-05-2008 | Отправлено: 18:12 23-04-2011
May_Johnson



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
moJoKras
 
1 Создай класс GraphicObject содержащий внутри всю информацию необходимую для прорисовки объекта, и публичным методом  
PaintMe(Graphics g);
 
2 Перенеси всю прорисовку в OnPaint формы/контрола, тогда тебе не надо вызывать  .Refresh(), если хочешь что то убрать - то просто не рисуешь, помимо того теперь тебе не надо вызывать CreateGraphics(), ты получаешь этот объект как аргумент
 
3 Объявляешь несколько массивов из GraphicObject которые будешь отрисовывать в OnPaint   - это и будут твои слои, например в один массив помещаешь все точки, в другой все линии,  и тогда чтоб не рисовать линии просто очищаешь массив с ними
 
 по поводу событий -  
Panel традиционно не "самофокусируемый", потому для того чтобы таки получать клавиатурные события для панели надо вызывать  
 
         
Код:
   this.ActiveControl = this.panel1;,  

 
что есть не очень хорошее решение

Всего записей: 47 | Зарегистр. 10-02-2008 | Отправлено: 20:02 24-04-2011 | Исправлено: May_Johnson, 21:05 24-04-2011
amr_now



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
По вопросу
http://forum.ru-board.com/topic.cgi?forum=33&topic=3706&start=2500#6
 
Molniev
Цитата:
Почему нельзя сделать самому: перечислить все файлы в папке, и для каждого выполнить сравнение с вашими критериями (расширинием). Совпадает - добавить в список/сделать что-там-надо. несовпадает - пропустить.  

Будет совершенно такой же костыль. Даже по размеру скрипта. То есть не будет применения функции отбора названий файлов непосредственно по расширениям.
 
BlackVetal
Цитата:
попробуй перечислить в шаблоне поиска нужные варианты через точку с запятой - вроде так должно работать

Не работает. Количество элементов массива становится 0.

Всего записей: 8604 | Зарегистр. 30-06-2006 | Отправлено: 12:27 25-04-2011
Mextrom



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
amr_now
Может фильтр можно задать по аналогии с System.Windows.Forms.OpenFileDialog или System.Windows.Forms.SaveFileDialog?

Код:
openFileDialog.Filter = "Format1|*.txt|Format2|*.xml";


Всего записей: 854 | Зарегистр. 30-03-2005 | Отправлено: 12:57 25-04-2011
DmitryP



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброго времени суток!
 Я написал небольшую консольную програмку на С#, скомпилировал под .NET 4. Не смотря на то, что я не использовал Threading, програма работает в 7 потоков и имеет проблемы с синхронизацией. Я пробовал засунуть проблемный блок кода в lock(this){}, но это не помогает. Можно ли заставить програму в 1 поток?

Всего записей: 653 | Зарегистр. 28-01-2002 | Отправлено: 17:28 25-04-2011
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
amr_now
Это по прежнему не прямой путь и сделано в принципе так же как и у тебя. Но с вариантами.
http://devpinoy.org/blogs/keithrull/archive/2008/02/01/how-to-search-a-directory-for-files-using-multiple-search-patterns.aspx
http://www.beansoftware.com/ASP.NET-FAQ/Multiple-Filters-Directory.GetFiles-Method.aspx
http://www.codeguru.com/forum/showthread.php?t=344379

Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 17:37 25-04-2011
LuckyStrike



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Зравствуйте, уважаемые программеры, помогите пжлст реализовать один алгоритм на c# или хотя бы наброски кода бросьте. не знал как выложить.... вот ссылка [URL=http://www.sharemania.ru/0146082][/URL]
 
Добавлено:
http://www.sharemania.ru/0146082

Всего записей: 78 | Зарегистр. 10-12-2008 | Отправлено: 20:24 25-04-2011
amr_now



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dneprcomp
Спасибо,
как раз второй вопрос был по расчленению строки как коллекции элементов, разделённых определённым символом.

Всего записей: 8604 | Зарегистр. 30-06-2006 | Отправлено: 07:11 26-04-2011
Открыть новую тему     Написать ответ в эту тему

Страницы: 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 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование в среде .NET (ASP.NET,ADO.NET) на C#/VB.NET


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru