опять проблемка в C#
что то совсем запутался, кто подскажет, если не трудно.
в текстовом файле есть записи по строчно:
"sim/cockpit/electrical/beacon_lights_on, 1"
конечно без ""
задача:
1.Нужно считать по строчно, разделить текст и число
2. Текст передать в checkedListBox
3. Оправить команду через "SendXPCommands"(пример: SendXPCommands("sim/cockpit/electrical/beacon_lights_on", 1);
4. После отправи команды посадить галку в checkedListBox.
5. не большая пауза примерно 0,5 сек.
6. считать следующую строчку и дальше по пунктам 2-5.
Всего то делов, а что то не разберусь как число отделить, как число передать в Int32,
как отдельно галку посадить вcheckedListBox, ну и как после первой строчки паузу посадить
и потом читать следующую.
Не пинайте сильно, редко таким делом занимаюсь.
пробовал так:
private const string FILE_NAME = @"data\738.chl";
String input;
private void fileread()
{
if (!File.Exists(FILE_NAME))
{
Console.WriteLine("{0} не существует.", FILE_NAME);
return;
}
using (StreamReader sr = File.OpenText(FILE_NAME))
{
while ((input = sr.ReadLine()) != null)
{
SendXPCommands(input, 1);
checkedListBox1.Items.Add(input, CheckState.Checked);
}
MessageBox.Show("Конец потока достигнут.");
}
}
Спасибо!
здесь ругался
string[] splitted = input.Split(new char[] { ',' });
заменил на
int code = Convert.ToInt32(splitted[1]);
работает.
но отпровляет команды все вместе, нужно одну за другой с небольшой остановкой
Не хочет поочерёдно вписывать в checkedListBox1
checkedListBox1.Items.Add(splitted[0]);
Thread.Sleep(1000);
SendXPCommands(splitted[0], code);
Thread.Sleep(1000);
for (int i = 0; i < checkedListBox1.Items.Count; i++)
{
checkedListBox1.SetItemChecked(i, true);
}
Команды отправляет правильно, а вот в checkedListBox1 пишет в конце всё сразу.
Где ошибка может быть?
Не из за Thread.Sleep случаем.
Пробовал без:
for (int i = 0; i < checkedListBox1.Items.Count; i++)
{
checkedListBox1.SetItemChecked(i, true);
}
всё равно в конце вписывает всё сразу в checkedListBox1,
а нужно
вписал техт в checkedListBox1
пауза
отправил команду
пауза
посадил галку напротив вписаного текста в checkedListBox1.
Не надо методом тыка.
У вам проблемы с языком или с пониманием алгоритма? "Забудьте" вначале про язык.
Распишите всю вашу прогу просто на русском языке, начиная с общих утверждений как уже было сделано. А затем начинайте более продвинутую детализацию каждого шага.
При этом рассматривайте исключительно один единственный шаг.
Что то типо такого:
Открыть текстовый файл ЦИКЛ ПОКА не обнаружен конец файла Читаем строку из файла Разбираем строку на отдельные части Выполняем требуемые действия над частями Пауза 500 мс Конец ЦИКЛ ПОКА Закрыть текстовый файл
примерно так
private async void button1_Click(object sender, EventArgs e)
{
var lines = System.IO.File.ReadAllLines(FILE_NAME);
foreach (var line in lines)
{
var ar = line.Split(',');
//TODO:проверка формата строки
int param;
int.TryParse(ar[1].Trim(), out param);
//TODO:проверка успешности приведения количественного параметра в строке
checkedListBox1.Items.Add(ar[0]);//добавляем в список
await Task.Delay(500);//дополнительная пауза для наглядности, удалите если не надо
SendXPCommand(ar[0], param);//отправляем команду
checkedListBox1.SetItemChecked(checkedListBox1.Items.Count - 1, true);//выставляем галку
await Task.Delay(1500);//для той же наглядности увеличенная пауза - поменяете как надо
}
}
private void SendXPCommand(string command, int param)
{
Console.WriteLine($@"{nameof(SendXPCommand)}({command},{param})");
}
Спасибо, теперь более понятно как такое делать,
ребят, я не программист, так немного увлекаюсь,
и стать хорошим кодереом у же не получится, возраст и времени столько нет, хотя.........
Иногда задаю здесь кое какие вопросы, но некоторые набрасываются со своими подколками и нравоучениями,
завидую белой завистью тем, кто этому обучался с нуля и не в преклонном возрасте, у меня такой возможности не было,
большая просьба ко всем, давайте жить дружно!:)))
Murr, AlexNek, maxxxl79,
огромное спасибо вам,
если дальнейшие трудности будут, буду писать в теме.
ну, что можно и что нельзя, пусть решает себе сам топикстартер, в своем посте он не писал "не давайте мне ни в коем случае готового решения, а намеками, намеками..."
а насчет научится он чему-то или нет - зависит не от того, нашел ли он готовое решение, а от него самого (желания, усидчивости и мозгов).
спасибо за поддержку,
может чему и научусь. :)))
вопросик ещё один есть:
бывает так что в одной строчки есть несколько команд,
они принадлежат одному тексту.
BATTERY ON,sim/cockpit2/electrical/battery_on[0], 1,laminar/B738/button_switch/cover_position[2], 0,sim/operation/failures/rel_batter0, 0
сейчас сделал так, что бы в checkedListBox1 вписывал техт и отправлял одну команду,
работает на ура, если несколько команд, то нужно преобразовать:
int.TryParse(ar[2].Trim(), out param);
если правильно понимаю, нужно от ar[2] до конца строчки определить сколько команд есть,
потом считать их и поочередно отправить.
Правильно ли я мыслю?
Вам надо анализировать длину массива, который получаете в результате сплита:
var ar = line.Split(',');
Далее, если исходить из того, что текстовый параметр и числовой параметр всегда идут парами, т.е. подразумевается, что длина массива в этом случае вссегда будет четной, то и определять по парности длину и количество пар (команд и числа), чтобы не зашиваться на
ar[2]
или что-то подобное, а определять в этом случае позиции динамически и, видимо, добавить дополнительный цикл обработки таких пар в строке.
-----
Потому тебе даются две вещи - где-то код над которым надо поработать, а где-то подсказка, по которой надо хорошо покопаться в доках.
Когда-нибудь, если будешь ковырять это дело самостоятельно... а большинство из нас не изучали это дело во время учебы - его просто не было в природе... дойдешь до чего-то полезного.
он не писал
-----
Так он и не должен это писать.
Ему нужно достичь результата.
Проблема в том, что сам результат в виде кода ему, в общем-то, не особо нужен - это понятно из уровня задачи, но в процессе решения задачи он должен кое-чему научится.
Так вот то, чему он должен научится, он должен достичь сам и только сам.
Ну а помощью при этом будет - понять где именно у него не понимание и дать толчок для смотрения в нужную сторону.
Только так он сможет достичь реального результата.
Анализ готового кода, увы, на начальноm этапе не позволяет самообучатся.
сейчас сделал так, что бы в checkedListBox1 вписывал техт и отправлял одну команду
-----
Если обработка одной команды оформлена в отдельную функцию, то все что надо сделать - нарезать строку на команды и скормить их этой функции.
Правильно ли я мыслю?
-----
Правильно. Вопрос в том, как ты будешь делить строку...
Кстати, а почему бы не написать класс Команда(текст, значение), оформить ее отсылку и потом заниматься только формированием Команд?
теперь надо от ar[2] до конца строки определить и считать все команды,
строка выглядит так:
BATTERY ON,sim/cockpit2/electrical/battery_on[0], 1,laminar/B738/button_switch/cover_position[2], 0,sim/operation/failures/rel_batter0, 0
от ar[2] будет так:
sim/cockpit2/electrical/battery_on[0], 1,laminar/B738/button_switch/cover_position[2], 0,sim/operation/failures/rel_batter0, 0
нужно считать это и передать куда то, например в string, что бы потом со string передать в SendXPCommands
от ar[2] будет так:
-----
Ты уже умеешь обращаться с одной командой. И понимаешь что такое массив.
Сейчас тебе нужно научится разбирать строку на массив одиночных команд. Делай как отдельную задачу.
П.С. Тебя не смущает что приведенная тобою строка не соответствует изначальному описанию Команды?
а BATTERY ON - тоже команда?
говоря про парность, я имел в виду вариант строки:
sim/cockpit2/electrical/battery_on[0], 1,laminar/B738/button_switch/cover_position[2], 0,sim/operation/failures/rel_batter0, 0
для такого формата можно ещё воспользоваться регулярными выражениями, например:
var result = Regex.Split(str, @"([\w+\s*\/\[\]]+,\s*\d+)");
результат к данной строке можно глянуть тут:
http://www.rubular.com/r/MtxvLyyTQk
но если в начале может произвольно идти что-то вроде BATTERY ON или ещё что-то в разных количествах, то естественно надо это тоже учесть.
думаю, в целом Вам понятно в какую сторону копать - дальнейший анализ уже зависит от предметных условий - какого формата строка возможна на входе.
BATTERY ON просто текст, он идёт как информация в checkedListBox1,
команда к нему:
sim/cockpit2/electrical/battery_on[0], 1,laminar/B738/button_switch/cover_position[2], 0,sim/operation/failures/rel_batter0,
здесь их три и они должны одновременно отправляться.
бывает и по одной:
ANTI COLLISION LIGHT,switch OFF,sim/cockpit/electrical/beacon_lights_on, 1
Где текст:
ANTI COLLISION LIGHT
команда:
switch OFF,sim/cockpit/electrical/beacon_lights_on, 1
Спасибо за подсказку, буду пробовать.
Хотя пока только не получается логику в языке C# выразить.
Буду учится, всё равно добьюсь, чего хочу. :)))
зря вы взъе репенились. я действительно по уровню решил, что за дали где-то. сейчас до читал ветку, так и не по нял, что за за дачу вы ре шаете, и в чем конкретно ваша про блема. за дача с формулирована аб солютно ха отично. рад за вас, что на шлись здесь люди, ко торые по няли : )
не давайте мне ни в коем случае готового решения
ну вроде это и так понятно. Написать готовое решение гораздо проще, а вот толк какой из этого, если ТС хочет чему то научится.
Вы же не будете каждый раз решать за него задачи.
зависит не от того, нашел ли он готовое решение
если есть решение задачи, то сама суть задачи исчезает.
Что то тут бардак начинается не связанный с языком программирования.
Прежде всего у Вас должна быть точная постановки задачи.
Ну или хотя бы полное описание формата исходных данных.
Приведенный сейчас формат уже не так просто разобрать на части.
Хотя пока только не получается логику в языке C# выразить.
Так уже писал - забудьте о конкретном языке программирования. Решайте задачу на своем родном языке, преобразовав ее в "стандартные конструкции"
- сделать что то
- ветвление / выбор
- цикл
Как только задача опишется в подобной форме, перевести ее на любой язык - дело исключительно "техники" (конкретных знаний языка)
Вот это тут и можно спрашивать и конкретный ответ будет даже очень уместен. Ну типа - как мне открыть текстовый файл?
ну вроде это и так понятно.
так же и так понятно и то, что учеба и решение задачек в принципе полезно как таковое, только к чему сейчас говорить о том, что вода водянистая, а масло масленое?
человек сюда не за курсом программирования/информатики пришел, а с конкретной задачей.
устроили тут какой-то педсовет :) пусть топикстартер будет судить, полезен ли был ему мой ответ, научился ли он чему-то новому из приведенного примера, вам-то что?! )
если есть решение задачи, то сама суть задачи исчезает.
какое-то прям философское утверждение, видимо, как следствие, можно прийти к выводу, что чтобы суть задачи не исчезала, задача не должна иметь решения.
получается, что Вы утверждаете, что любые примеры кода - вредны, а msdn, стековерфлоус и иже с ними - совершенно бесполезные ресурсы для получения новых знаний.
Ну, до "готовности" приведенный код очень далек, поэтому разница между "готовый код" и "пример кода" несколько расплывчата в данном контексте.
И я уверен, что данный пример кода был полезен топикстартеру. Мм... по-крайней мере, он так написал :)
Вреден или нет пример, повторюсь, зависит от самого человека - увидит в примере незнакомые ему вещи - пойдет их гуглить, пробовать, экспериментировать, а не будет этого делать - то и не научится ничему в любом случае.
Вы утверждаете, что любые примеры кода - вредны
-----
На начальном этапе обучения - 100% вредны.
Используемые при обучении задачи интереса не предстваляют - интерес представляет цель которой пытаются достичь давая задачу. Задача лишь средство поддержания интереса в процессе.
Когда-то мучал курсантов таких же курсов обычными сортировками.
Даю задание - находят в инете или книгах и притаскивают.
Но поиск не дает понимания процесса - чуть поменяются условия - тупик.
Пока сами не проработают - все бесполезно...
я уверен, что данный пример кода был полезен
-----
Вреден.
Благодаря приведенному коду он не смог самостоятельно проанализировать ошибку допущенную им в цикле.
Не появилось у него навыка поиска таких ошибок.
пойдет их гуглить, пробовать, экспериментировать
-----
Не на этом уровне - у него еще синтаксис плавает и логика на все четыре хромает...
Как написал Алех - можно дать техническую информацию когда уже есть понимание какая информация нужна... ну или в том случае, когда она не связана с учебной целью - т.е. задача не на нахождение этой информации и ее не хватает... тот же Слееп()...
Остальное - сам, сам и еще раз сам...
На начальном этапе обучения - 100% вредны.
начальный этап, это который? Системы счисления, побитовые операции? Тема называется "опять проблемка в C#", т.е. речь идет о конкретном языке программирования, а раз так, то получается странно - во всех книжках, даже для начинающих изучать C# я встречал... О, боже - большое количество примеров кода :)
Вреден.
конечно, Вам виднее, чем топикстартеру, который написал:
Спасибо, теперь более понятно как такое делать,
Но я Вас понял, Вы имеете в виду, что, несмотря на то, что ему стало понятнее и в последующих постах он стал задавать вопросы и пытаться понять, как и что делать дальше - он не знает, что на самом-то деле нанес себе непоправимый вред, прочитав мой пост :D
Не появилось у него навыка поиска таких ошибок.
А советовать использовать Thread.Sleep в основном потоке гуи приложения - это тогда к чему, к будущим навыкам разработки гуи?
Или утверждать, что мол, у человека синтаксис хромает, при этом кидаеть ему код, который сами не проверяли, чтоб ещё и с этим помучился? Это тоже в целях обучения? Какой Вы тонкий педагог, однако :)
Господа, предлагаю снизить менторский тон ) такое ощущение, что зашел на форум учебного заведения, где тусят студент и два препода, с той лишь разницей, что топикстартер не является вашим студентом, а вы, очевидно, не являетесь педагогами.
maxxxl79,
твой пример кода помог очень, за что при много благодарен.
Опишу конкретно что за проблема.
Кто нибудь увлекается Flight Simulator X-Plane?
Наверное нет, так бы сразу поняли по датарефам.
Пробую создать дополнение что то типа "Второй пилот".
Обычно приложения для симулятора пишутся в С++, но для меня этот язык тёмный лес,
поэтому решил попробовать лично для себя такое сделать в С#, потому что с этим языком хоть как то знаком.
Это не коммерческая идея и в продажу никогда не пойдёт, если будет работать как задумано, выложу в группу в ВК.
Задача:
выполнения функций второго пилота по чек листу + datarefs.
Если бы хоть как то была возможность реализовать такое в С++, может кто то знает его хорошо и готов стать наставником, буду только рад, было бы идеально.(Если кто то согласиться, полную информацию предоставлю)
Чек лист прописан в простом текстовом редакторе имея определённую структуру, чек лист разбит на подразделы, каждый подраздел будет привязан к определённой кнопке.
Подразделы будут отделены друг от друга пробелом, может чем то другим, пока не знаю.
Ну примерно как то так.
Ребят я понимаю что здесь находятся профи своего дела, но большая просьба, давай те без грызни, а то на какой форум не зайдёшь, везде грызутся.
Всё таки программисты более интеллигентные люди, или я ошибаюсь?
По поводу высказываниям типа пускай сам учится, вы не правильно поняли меня, я не учится сюда пришёл, и не уверен, если эту идею осилю, что то ещё когда то буду делать в C#.
Чему то конечно научусь с вашей помощью, но
мне очень помогают в "учёбе" конкретные примеры, как сделал maxxxl79.
Как вы видели в первом посту я привёл конкретный пример, если бы мне просто нужна была подсказка, я бы этого не делал.
В роди бы всё объяснил, как мог! :)))
П.С так и не получается разбить строку на массив одиночных команд, информации много, но знаний языка не хватает.
П.С так и не получается разбить строку на массив одиночных команд, информации много, но знаний языка не хватает.
напишите ещё раз пример строки, которую пытаетесь разбить, и пример того, какой на выходе должен быть массив, ну и как пытаетесь это сделать.
знаний языка не хватает.
------
Знаний языка у тебя достаточно - там будет все тоже самое что уже использовалось - этого достаточно.
А недостаток - в навыках его использования - именно возможности получения этих навыков тебя лишил пример maxxxl79.
GENERATORS DRIVE DISCONNECT switches GUARD CLOSED,laminar/B738/one_way_switch/drive_disconnect1_pos, 0,laminar/B738/one_way_switch/drive_disconnect2_pos, 0,laminar/B738/button_switch/cover_position[4], 0,laminar/B738/button_switch/cover_position[5], 0
в checkedListBox1.Items.Add(ar[0]); вписываем текст до первой запятой:
GENERATORS DRIVE DISCONNECT switches GUARD CLOSED"
остались команды:
laminar/B738/one_way_switch/drive_disconnect1_pos, 0,laminar/B738/one_way_switch/drive_disconnect2_pos, 0,laminar/B738/button_switch/cover_position[4], 0,laminar/B738/button_switch/cover_position[5], 0
эти команды надо отправить через SendXPCommands,
сейчас отправляется только первая команд после запятой:
SendXPCommands(ar[1], param);
надо отправить все разом или поочерёдно.
Затем ставиться галочка в
checkedListBox1.SetItemChecked(checkedListBox1.Items.Count - 1, true);
как то так.
примерно так
Постмотрел я примерчик в студии - как можно такое показывать начинающему совершенно непонятно.
Для начала какого там делают "async" и "await"? - разобраться с этим в начале практически невозможно.
Также использование "var" весьма нежелательно.
Какой смысл использовани TryParse без if также непонятно.
А использование nameof вообще выходит за рамки приличий для начинающих. Как и $ , @
Да и вообще эта линия
Console.WriteLine($@"{nameof(SendXPCommand)}({command},{param})");
Одна большая загадка которую непонятно как нужно расшифровывать. Зачем?
Подобный код просто вреден для начинающего.
еще раз просмотрел ветку, так и не понял что нужно сделать. попробую позадавать вопросы
0. вот это:
GENERATORS DRIVE DISCONNECT switches GUARD CLOSED,laminar/B738/one_way_switch/drive_disconnect1_pos, 0,laminar/B738/one_way_switch/drive_disconnect2_pos, 0,laminar/B738/button_switch/cover_position[4], 0,laminar/B738/button_switch/cover_position[5], 0
лежит где-то в файле, и организовано так, что разделитель - ВСЕГДА только запятая, первый элемент - некая отдельная сущность, а остальное - попарно идущие единицы. т.е. если разбить всю эту длинную строку на куски там, где запятая, то мы обязательно должны получить нечетное число подстрок. правильно?
0.5 если п.0 верен, то, видимо, нужно выделить первый кусок, а с парами проделать что-то другое, и вы знаете что именно.
1. о каком комбобоксе речь?
2. о каком листбоксе речь?
3. что конкретно вы не знаете как делать, или знаете, но оно не получается?
4. почему вы ленитесь писать что-то, где-то,
как-то через черточку? это все равно как я бу ду пи сать во т так. читать сло жно : (
хорошо бы уточнить, в начале Вы писали, что строки формата
sim/cockpit/electrical/beacon_lights_on, 1
которая по сути сама является командой, насколько я понял.
потом добавили, что строка может быть вида:
GENERATORS DRIVE DISCONNECT switches GUARD CLOSED,laminar/B738/one_way_switch/drive_disconnect1_pos, 0,laminar/B738/one_way_switch/drive_disconnect2_pos, 0,laminar/B738/button_switch/cover_position[4], 0,laminar/B738/button_switch/cover_position[5], 0
и для последнего случая определили, что текст, отображаемый в checkListBox - это текст до первой запятой, далее идет ряд команд, а именно - четыре команды, верно понял? в первом случае что должно отображаться в checkedListBox, там получается в качестве текста должна отображаться сама команда?
Постмотрел я примерчик в студии - как можно такое показывать начинающему совершенно непонятно.
Для начала какого там делают "async" и "await"? - разобраться с этим в начале практически невозможно.
Вы читаете, что пишет ТС? он уже черным по белому написал, он сюда пришел не за курсом программирования, а чтобы ему помогли сваять конкретную вещь.
Также использование "var" весьма нежелательно.
Вы хотите ещё больше оффтопа добавить в тему? )
Если Вы считаете себя гуру, то, наверное, знаете, что var не следует использовать в случаях, например, когда надо задействовать базовый класс или интерфейс, иными словами в том случае, если указание или не указание типа создает неоднозначность, в данном случае правая сторона вполне себе однозначна и использование var в этом случае сводится к стилю, привычке, удобству - с таким же успехом Вы можете сказать, что нежелательно использовать в студии такой-то шрифт, т.к. он портит зрение быстрее другого. И категоричное утверждение, что использование нежелательно натыкается на вопрос - как Вы создаете анонимные типы?
Какой смысл использовани TryParse без if также непонятно.
О том, что это "готовый код" писали Вы, а не я, я как раз таки писал, что до готовности далеко, если Вы удосужились посмотреть код, то посмотрите там и комментарии, в которых написано, что требуется проверка.
А использование nameof вообще выходит за рамки приличий для начинающих. Как и $ , @
Интересно, а чем так сложно использование nameof? или $? Лишь тем, что это появилось в более поздних версиях шарпа? Почему человек, который хоть и начинающий, не может использовать в коде то, что есть в языке на сегодняшний день? Вы считаете, что раз человек плохо знает язык, то использовать он должен только C# 2.0 например?
Забавно, Вы находите время заходить в тему, посмотреть код в студии, поцокать языком, покачать головой, написать как всё плохо и как всё вредно и как это всё не поможет ТС, но сами при этом ничего путного ему не написали. Так сделайте это, напишите ему код, который он в лёт поймет, и все будут довольны.
Если Вы считаете себя гуру
Я себя, грубо говоря, никем не считаю - просто высказываю свое мнение.
как Вы создаете анонимные типы?
А никак не создаю - не требовалось пока. Хотя вот это и есть фактически единственное использование var.
Интересно, а чем так сложно использование nameof? или $?
Тем что это, во первых не нужно, а вторых непонятно.
Достаточно просто сравнить
"SendXPCommand " + command + "," + param.ToString();
$@"{nameof(SendXPCommand)}({command},{param})"
Почему человек, который хоть и начинающий, не может использовать в коде то, что есть в языке на сегодняшний день?
Вы путаете сущности.
Начинающий вполне может их использовать если нашел, прочитал и разобрался, но писать такой код начинающему - это просто неуважение к начинающему.
Так сделайте это, напишите ему код, который он в лёт поймет
Вообще то это самое простое, что можно сделать, но какой в этом смысл?
Тем что это, во первых не нужно, а вторых непонятно.
Если Вы считаете что-то ненужным и непонятным, это не значит, что другие должны считать так же.
nameof дает возможность в ряде случае не зашиваться на hard-coded строки, а более формально определять выражение, лично мне стало удобнее работать с Expressions, обработкой эксепшенов, я считаю это хорошим нововведением.
Насчет сравнения строк, Вы же не имеете ничего против:
string.Format("Привет {0}, меня зовут {1}", name1, name2);
Чем плоха более короткая запись?:
"Привет {name1}, меня зовут {name2}"
Мне второй вариант кажется более наглядным. Опять-таки, дело вкуса.
Ваше "не нужно" я бы заменил на "необязательно", что можно при желании говорить к любому синтаксическому сахару.
Вообще то это самое простое, что можно сделать, но какой в этом смысл?
:) удобная фраза, конечно, намного больше смысла по-оффтопить, засорить тему ТС и выдать в конце эту фразу - это к вопросу об уважении.
nameof дает возможность в ряде случае не зашиваться на hard-coded строки
Может вы еще сможете объяснить необходимость использования nameof в данном конкретном случае?
Чем плоха более короткая запись?:
Тем что она просто вредна - у нас разрешено использование исключительно String.Format. Догадываетесь отчего?
намного больше смысла по-оффтопить, засорить тему ТС
вообще то подобные обсуждения могут дать гораздо больше пользы чем плохо написанный код.
исхожу из того, что я угадал правильно, приведу вам код, несмотря на то, что гуры - против : )
string str = "GENERATORS DRIVE DISCONNECT switches GUARD CLOSED,laminar/B738/one_way_switch/drive_disconnect1_pos, 0,laminar/B738/one_way_switch/drive_disconnect2_pos, 0,laminar/B738/button_switch/cover_position[4], 0,laminar/B738/button_switch/cover_position[5], 0";
string[] lines = str.Split(',');
if (lines.Length > 0 && lines.Length%2 == 1) {
___string separate_item = lines[0];
___//и делаем с эти separate_item что надо (в чекбокс? вы в курсе)
___var query = lines.Skip(1).Select((x, i) => new { Index = i, Value = x }).GroupBy(x => x.Index / 2).Select(x => x.Select(v => v.Value).ToArray()).ToList();
___foreach (string[] pair in query) {
______string first = pair[0];
______string second = pair[1];
______// и получаете здесь в first - вашу "команду", а в second - число, которое вы знаете, что означает. распоряжаетесь как знаете
___}
}
гуры, наверное, против, чтобы вам смотреть такой код, но это 100% сработает. захотите понять как - почитаете книжки. если хотите освоить c#, то без linq, lambda expression и прочего как можно обойтись? привыкайте : )
Может вы еще сможете объяснить необходимость использования nameof в данном конкретном случае?
Что-то категорично говоря про var, Вы не рассматривали конкретные случаи :) Про nameof я не писал про необходимость, Вы невнимательно читаете и дописываете за меня.
Тем что она просто вредна - у нас разрешено использование исключительно String.Format. Догадываетесь отчего?
Не догадываюсь. Поделитесь. Интересно.
вообще то подобные обсуждения могут дать гораздо больше пользы чем плохо написанный код.
Спросите у ТС, получил ли он от Ваших сообщений пользу за эти пока ещё три страницы.
я тут никого не критиковал за попытку помочь тому, кто просит помощи :) поэтому я не против никаких вариантов решения.
по задаче:
я так понял, что текст
GENERATORS DRIVE DISCONNECT switches GUARD CLOSED
может быть, а может и не быть в начале строки, собственно, поэтому и попросил ТС прояснить этот момент.
а пары как вариант можно вытаскивать ещё регуляркой:
var matches = Regex.Matches(str, @"([\w+\s*\/\[\]]+,\s*\d+)");
выглядит короче, но кое-кто сейчас напишет, что давать код с регулярными выражениями несведущим людям - это хамство )
ребят, давайте без нравоучений, битте!
написал же уже, целью не является стать профи.
maxxxl79,
спасибо ещё раз, что находишь время для меня,
1. сейчас текстовый файл выглядит так:
BATTERY ON / GUARD_CLOSED,sim/cockpit2/electrical/battery_on[0], 1,laminar/B738/button_switch/cover_position[2], 0,sim/operation/failures/rel_batter[0], 0
STANDBY POWER switch AUTO / GUARD CLOSED,sim/cockpit2/electrical/battery_on[1], 1,laminar/B738/button_switch/cover_position[3], 0,sim/operation/failures/rel_batter1, 0
GENERATORS DRIVE DISCONNECT switches GUARD CLOSED,laminar/B738/one_way_switch/drive_disconnect1_pos, 0,laminar/B738/one_way_switch/drive_disconnect2_pos, 0,laminar/B738/button_switch/cover_position[4], 0,laminar/B738/button_switch/cover_position[5], 0
BUS TRANSFER switch AUTO / GUARD CLOSED,sim/cockpit2/electrical/cross_tie, 1,laminar/B738/button_switch/cover_position[6], 0
GROUND POWER ON,sim/cockpit/electrical/gpu_amps, >0.0,sim/operation/failures/rel_ex_power_on, 0
где:
BATTERY ON / GUARD_CLOSED,
STANDBY POWER switch AUTO / GUARD CLOSED,
GENERATORS DRIVE DISCONNECT switches GUARD CLOSED
BUS TRANSFER switch AUTO / GUARD CLOSED,
GROUND POWER ON,
информационный текст, он прописывается в checkedListBox1 только как информация.
Отделить его можно запятой или другим методом(например ;, -, @, %, &, §, и.т.д)
2. команды находятся
после текста:
sim/cockpit2/electrical/battery_on[0], 1,laminar/B738/button_switch/cover_position[2], 0,sim/operation/failures/rel_batter[0], 0
sim/cockpit2/electrical/battery_on[1], 1,laminar/B738/button_switch/cover_position[3], 0,sim/operation/failures/rel_batter1, 0
laminar/B738/one_way_switch/drive_disconnect1_pos, 0,laminar/B738/one_way_switch/drive_disconnect2_pos, 0,laminar/B738/button_switch/cover_position[4], 0,laminar/B738/button_switch/cover_position[5], 0
sim/cockpit2/electrical/cross_tie, 1,laminar/B738/button_switch/cover_position[6], 0
sim/cockpit/electrical/gpu_amps, >0.0,sim/operation/failures/rel_ex_power_on, 0
к каждому тексту свой блок команд, они могут подаваться как одновременно, так и одна за другой.
в каждой строчки, один блок команд.
Задача:
1. определить конец каждой строчки, можно отделить каждый блок каким либо символом(например ;, -, @, %, &, §, и.т.д)
Нужно разбить строчку на два блока, отделить информационный текст от команд.
Может быть считать только команды по отдельности и потом связать их вместе?
2. Информационный текст вписать в checkedListBox1
3. Подать команду или блок команд.
4. Поставить галку в checkedListBox1.
Примерно так, думаю сейчас более понятно объяснил.
Примерно так, думаю сейчас более понятно объяснил.
что здесь "более понятно", мне непонятно : ( как была каша, так и остается. я бы на вашем месте попытался все таки еще раз задачу внятно сформулировать. вы вещаете так, как будто мы с вами в одной комнате уже месяц находимся, видим, что вы там уже наделали, что уже сделали, какие чембоксы, зачем и пр. а мы ничего не видим и не знаем, кроме того, что вы здесь излагаете.
поменял изначальный пример:
private async void button1_Click(object sender, EventArgs e)
{
var lines = System.IO.File.ReadAllLines(FILE_NAME);
foreach (var line in lines)
{
//получаем текст, исходя из того, что строка должна начинаться с него
var text = line.Split(',')[0];
checkedListBox1.Items.Add(text);//добавляем текст в список
await Task.Delay(500);//дополнительная пауза для наглядности, удалите если не надо
//ищем команды
var matches = Regex.Matches(line, @"([\w+\s*\/\[\]]+,[\s*>?.?\d]+)");
//каждую команду отправляем, не понял, что имеете в виду под отправку всего блока команд - измените как нужно, здесь отправляем каждую команду, которую нашли в строке последовательно
foreach (Match match in matches)
{
var ar = match.Value.Split(',');
SendXPCommand(ar[0].Trim(), ar[1].Trim());//отправляем команду
await Task.Delay(1500);//для той же наглядности увеличенная пауза - поменяете как надо
}
checkedListBox1.SetItemChecked(checkedListBox1.Items.Count - 1, true);//выставляем галку
}
}
private void SendXPCommand(string command, string param)
{
Console.WriteLine($@"{nameof(SendXPCommand)}({command},{param})");
}
SendXPCommand(ar[0], ar[1]);
ar[1] не работало, ошибку показывало, добавил
int param;
int.TryParse(ar[1].Trim(), out param);
теперь выглядит так:
private async void readfile()
{
var lines = System.IO.File.ReadAllLines(@"data\738.chl");
foreach (var line in lines)
{
var text = line.Split(',')[0];
checkedListBox1.Items.Add(text);
await Task.Delay(500);
var matches = Regex.Matches(line, @"([\w+\s*\/\[\]]+,[\s*>?.?\d]+)");
foreach (Match match in matches)
{
var ar = match.Value.Split(',');
int param;
int.TryParse(ar[1].Trim(), out param);
SendXPCommands(ar[0],param);
await Task.Delay(500);
checkedListBox1.SetItemChecked(checkedListBox1.Items.Count - 1, true);
await Task.Delay(500);
}
}
и работает, maxxxl79 огромное спасибо.
ещё есть проблема с разбиранием массива:
параметер показан здесь
нужно извлечь текст из массива, массив от 0-40.
пробовал так:
взял параметр 5
SendXPCommands("sim/aircraft/view/acf_ICAO", 10, 5);
if (paramNum == 5)
{
char[] buf = new
char[binaryReader.BaseStream.Length - binaryReader.BaseStream.Position];
binaryReader.Read(buf, 0,
(int)(binaryReader.BaseStream.Length -
binaryReader.BaseStream.Position));
string ICAO = new string(buf);
ICAO = ICAO.Split(new[] { '\0' }, 2)[0];
ar[1] не работало, ошибку показывало, добавил
Вы видимо не обновили метод SendXPCommand, там второй аргумент стал строковым, т.к. в примерах, которые привели встречалось ">0.0" - как такое должно обрабатываться Вы не пояснили, поэтому я для простоты примера просто передавал строку.
ну, во-первых, не вся работа со строками крутится вокруг ресурсов. во-вторых, если уж принципиально надо использовать интерполяцию и ресурсы, то почему нельзя хранить в ресурсах статическую часть (если надо, локализованную), а подстановку делать в интерполяции, для String.Format ведь все равно подставляете аргументы в коде, что и неудивительно, учитывая, что интерполяция является всего лишь синтаксическим сахаром к String.Format.
если уж принципиально надо использовать интерполяцию и ресурсы, то почему нельзя хранить в ресурсах статическую часть (если надо, локализованную), а подстановку делать в интерполяции
А можно пошаговую инструкцию для программиста по локализации проекта сделанного "любителем последних извращений"?
Вы не нервничайте, а то ещё немного и похоже на личности перейдете :) Вы выдаете какой-то обобщенный тезис, а потом хватаетесь за частные случаи. Я согласен, что интерполяция не несет преимуществ для задач локализации строк из ресурсов. Под тем, что Вы процитировали, я имел в виду просто вариант:
Console.WriteLine($@"{Properties.Resources.Command} {command}");
как пример.
Но раз уж Вы решили теперь удариться в конкретику, скажите, как в конкретной задаче слепка строки, которая состоит только из динамических данных (например, того же входного текстового файла или БД) я должен использовать ресурсы? Что собственно я должен в этих ресурсах в этом случае хранить, к чему Вы о них заговорили?
Привет всем,
не подскажет кто нибудь, как использовать число из стринга в "Thread.Sleep()"?
Например из файла прочитал число "1000" или "1",
передал в "string wait;"
и в "Thread.Sleep(wait)" использовать.
Время для паузы стоит в файле, как преобразовать в миллисекунды не пойму.
Посмотрите пожалуйста код,
private void Chek()
{
var lines = System.IO.File.ReadAllLines("config.cfg");
foreach (var line in lines)
{
var matches = Regex.Matches(line, @"([\w+\s*\/\[\]]+,[\s*>?.?\d]+)");
foreach (Match match in matches)
{
var text = line.Split(',')[0];
checkedListBox1.Items.Add(text);
MessageBox.Show(text);
var ar = match.Value.Split(',');
int param;
int.TryParse(ar[1].Trim(), out param);
do
{
Thread.Sleep(500);
SendXPCommands(ar[0], param);
Thread.Sleep(500);
Thread XPRead = new Thread(new ThreadStart(chekCommand));
XPRead.Start();
SendXPCommands(ar[0], 10, param);
Thread.Sleep(500);
SendXPCommands(ar[0], 0, param);
}
while (resultat != param.ToString());
{
checkedListBox1.SetItemChecked(checkedListBox1.Items.Count - 1, true);
}
}
}
}
происходит всё как нужно, но если убираю:
MessageBox.Show(text)
проходит всю процедуру, а
потом уже все строчки разом вписывает в "checkedListBox".
А нужно что бы прочитал строку, вписал в checkedListBox, провёл процедуру, убедился что результат положительный, поставил галку в checkedListBox,
только тогда начал читать следующую строку.
Ребят, большая просьба, не отправляйте меня учить C#, если кто знает, подскажите пожалуйста конкретным примером.
Спасибо за понимание.
происходит всё как нужно, но если убираю:
-----
Окошко мессагебоха отрисовывается поверх окошка програмки.
После его закрытия - перерисовываются затронутые им контролы.
Вопрос - когда же ты будешь перерисовывать свой чецклистбох?..
И это... как у тебя работает этот моментик
while (resultat != param.ToString());
{
checkedListBox1.SetItemChecked(checkedListBox1.Items.Count - 1, true);
}
пояснить не затруднит?
Вопрос - когда же ты будешь перерисовывать свой чецклистбох?..
в чеклистбокс вписывается текст сразу:
var lines = System.IO.File.ReadAllLines("config.cfg");
foreach (var line in lines)
{
var matches = Regex.Matches(line, @"([\w+\s*\/\[\]]+,[\s*>?.?\d]+)");
foreach (Match match in matches)
{
var text = line.Split(',')[0];
checkedListBox1.Items.Add(text);
потом оправляется команда и проверяется выполнена ли она,
взял метод "do", что бы крутилось пока не выполниться:
var ar = match.Value.Split(',');
int param;
int.TryParse(ar[1].Trim(), out param);
do
{
Thread.Sleep(500);
SendXPCommands(ar[0], param);
Thread.Sleep(500);
Thread XPRead = new Thread(new ThreadStart(chekCommand));
XPRead.Start();
SendXPCommands(ar[0], 10, param);
Thread.Sleep(500);
SendXPCommands(ar[0], 0, param);
}
проверял методом "while", если команда выполнена, поставить галку в чеклистбоксе,
while (resultat != param.ToString());
{
checkedListBox1.SetItemChecked(checkedListBox1.Items.Count - 1, true);
}
но он почему то вначале выполняет команды, а потом уже пишет разом весь текст в чеклистбокс и ставит галки.
нужно:
1. Вписать в чеклистпокс текст
2. выполнить команду.
3. Проверить выполнена ли команда
3.1 Если не выполнена, повоторить пункт 2, 3
4. Если команда выполнена, поставить галку в чеклистбокс напротив вписанного текста.
5. Читать следующую строку в файле.
Если кому интересуют детали, могу через скайп показать.
Ты просишь не отправлять тебя учить С#.
Но без этих знаний ты не можешь написать код.
взял метод "do", что бы крутилось пока не выполниться
-----
Не взял метод, а использовал оператор. Как выглядит оператор и как он работает вполне нужно/можно смотреть в доках.
проверял методом "while", если команда выполнена, поставить галку в чеклистбоксе,
-----
Вхиле - тоже не метод, тоже оператор.
Если его рассматривать так как описно у тебя, то
while (resultat != param.ToString()) /* именно эта часть - до точки с запятой - должна выполнятся.*/ ;
Но твоя проблема в том, что данный вхиле - не тот вхиле который ты ожидаешь/описываешь. Это часть ДО - смотри в доках детали.
В программировании на языках типа Шарпа конструкция означает не то что ты для нее задумал, а то что определено синтаксисом языка... даже если вроде как должно быть по-другому - будет так как написано. По-другому - не будет.
но он почему то вначале выполняет команды, а потом уже пишет разом весь текст в чеклистбокс и ставит галки.
-----
Прими на веру - там делается именно то, что написано в программе.
Раздели на три части:
- Менеджер - читает фаил, отдает строки Парсеру, отдает блоки Команд Исполнителю и помещает нужное в ЧекедЛистБох.
- Парсер - каким угодно методом нарезает полученную строку на блок Команд.
- Исполнитель - выполняет Команды и сообщает результат.
Ну и, разумеется, Команды оформи как Команды.
Чем меньше кода тебе надо будет рассматривать за раз - тем быстрее ты поймешь где у тебя проблема.
1. Вписать в чеклистпокс текст
-----
Ну тут самая первая проблема в том, что непонятно какой текст вписывать в чеклистбох. Откуда его брать - не написано...
Честно говоря, Я до сих пор не до конца понимаю, что именно ты называешь командой.
Сначала это
было - < Текст >< Запятая >< Цифра >
потом < Текст >< Запятая >< Число >
потом < Текст >< Запятая >< Текст >< Запятая >< Цифра >
потом < Текст >< Запятая >< Текст >< Запятая >< Цифра >< Запятая >< Текст >< Запятая >< Цифра >...
[/пре]
Насколько Я могу судить - у тебя есть нечто, что базируется на строке текста имеет:
- текст который нужно поместить в ЧекедЛистБох,
- должно содержать одну и более Комманд,
- возможность выполнить команды
- сообщить результат...
Это может быть таким:
[pre]
class TCommandBlock{
public TCommandBlock(string text)
{
if (TParser.Validate(text))
throw Exception("Wrong command text");
Text4ListBox = TParser.GetListBoxText(text);
Commands = TParser.GetCommands(text);
Status = TStatus.Unknown;
}
public string Text4ListBox { get; internal set; }
public List<TCommand> Command { get; internal set; }
public TStatus Status { get; internal set; }
public bool Execute()
{
bool result = true;
// here should be a code to execute block of the command
// it should change result to false if fail
if(result == true)
{
Status = TStatus.Ok;
}
else
{
Status = TStatus.Fail;
}
return result;
}
}
Разумеется, что это мало похоже на то что ты ожидаешь и тебе непонятно куда его пристраивать... но чтобы понять - надо учится.
Пока скажу что Менеджер должен получить строку из файла и создать ТКомманБлоцк на базе этой строки. Потом - управлять заполнением чецклистбоха, выполнением блока Комманд и проверкой статуса после выполнения.
Спасибо за разъяснение,
отключил чеклистбокс,
команды читаются, отправляются, проверются, если надо, повторяются, если команда исполнена, читается следующая строка,
единственная проблема, в чеклистбокс вписываются все разом после проверки.
Почему, пока не понимаю.
Учиться никогда не поздно, но вот такой я ученик, учусь на конкретных примерах.
Даже просто прочитать строки из файла и вписать их построчно в чеклистбокс не получается,
вписывается все разом.
Может быть кто нибудь на конкретном примере, как построчно вписывать строчки из файла в чеклистбокс или листбокс?
Почему, пока не понимаю.
-----
Это довольно далеко от начал языка - это то, как форма/система отрисовывает контролы.
Когда ты заполняешь контролы данными они перерисовываются не сразу.
Так что либо ты ждешь когда система определит необходимость перерисовать контрол,
либо сообщаешь системе что она должна это делать и даешь возможность это сделать.
Читай Application.DoEvents
и Control.Invalidate & Co...
Читай Application.DoEventsи Control.Invalidate & Co...
Murr, а вот за это спасибо, теперь работает как надо!
Привет всем,
что то не выходит ничего с "Thread.Sleep".
string wait = "00:00:00." + time;
DateTime dt = Convert.ToDateTime(wait);
MessageBox.Show(dt.ToString("ffff"));
int millis_pause = dt.ToString("ffff");
Thread.Sleep(millis_pause);
с int millis_pause = dt.ToString("ffff"); не выходит,
куда можно передать dt.ToString("ffff") чтобы потом в Thread.Sleep использовать?
Murr, ну не глумись битте :))
сам допёр.
забракуй:))))
string wait = "00:00:00." + time;
DateTime dt = Convert.ToDateTime(wait);
string value = dt.ToString("ffff");
TimeSpan interval = TimeSpan.Parse(value);
int num= Convert.ToInt32(value);
Thread.Sleep(num);
а что здесь вообще пытаетесь сделать? вижу, что вычислить время паузы. но не могу врубиться, из чего, и почему через дакие дебри? похоже, нужно что-то, лежащее в строчке time, и нам не показываемое, превратить в миллисекунды, но это только спекуляции...
если у вас уже имеется строчка time, в которой находится значение "5000", то чего вы пытаетесь достичь с помощью DateTime, TimeSpan etc? почему просто не получить число непосредственно из строки? вы здесь, видимо, народ разводите, и таким образом развлекаетесь.
ничего страшного, некоторые, вижу, развлекаются не меньше вашего, им нравится, когда их разводят : )
а я просто не верю, что бывают настолько тупые люди, отсюда, как шерлок холмс, делаю вывод: если отбросить все версии, противоречащие несомненным фактам, то останется истинная версия. и она состоит в том, что вы разводите народ. ну, или ... все равно не верю ...
зы. открыть, что ли, тему "как запрограммировать модель вселенной на java?", приводить туда какие-нибудь куски где-нибудь взятого кода и задавать вопросы. сообщество поможет, как вы считаете?
Вы зря обижаетесь, Ваш способ обучения, мягко говоря, немного странный. Написать прогу ничего не изучая, а только прося чтобы, что то написали конкретное, по моему мнению, совершенно тупиковый путь. Я уже вам рекомендовал написать прогу вначале просто на русском, а с переводом на шарп уже поможем.
Кстати, данный вопрос касается именно перевода. "У меня есть целое число как строка, как ее перевести в 'нормальное' целое число"?
Самый простой вариант, без всяких проверок
int duration = int.Parse("5000");
Так вообще лучше не делать, но для для начала вполне допустимо. Вначале хорошо бы проверить, что строка не пустая и не нулевая, а также позаботится чтобы прога не вылетала, если на вход попадет не целое число, а например буквы. Но это уже усложнение, которое сейчас не требуется.
разве я где-то писал просьбу меня чему нибудь научить?
Или просил написать мне код?
Кроме наглядных примеров ничего не спрашивал.
Или moose меня лично знает, что бы судить тупой я или нет.
Собрался сброд заумных кодеров- учителей, кроме как учить других ничего не могут.
Превратили фору в срач и довольны.
Кому не понятны мои вопросы, предлагал наглядно показать, хорошо нашлись люди поняли и чем могли - помогли.
По этому тема закрыта!
Всем спасибо, все свободны
Мда, странная ситуация. Обычно для создания любого продукта, в том числе и программного нужен набор неких знаний,
а когда знаний нет и для учебы есть серъезные противопоказания, то продукт обычно покупается.
Делать что то самому, в надежде что когда нибудь получится, тоже можно, если находится на необитаемом острове.
А так, лучше лечить противопоказания к учёбе, пригодится на будущее.
Alex, не переживай,
продукт как таковой не нужен,
продукты делаются для продаж, чем я занимаюсь, не продаётся, это просто увлечение.
По поводу учебы могу сказать только одно,
у каждого свой подход.
Мой подход „learning by doing“.
Ты можешь мне не верить, но чего я хотел добитьсяработает, хватило тех знаний, которые имею и
конечно подсказки здесь адекватных ребят помогли.
Коммерческие разработки доводилось не раз делать, но не в C#, за что получаю зарплату последние 15 лет.
А читать здесь реплики засранцев теоретиков,
нет больше желания.
Кто хочет знаниями померится, пусть рискнёт софтину для симулятора X-Plane сделать, под все крафты, например Jardesign, Flight Factor, Felis, и.т.д., для всенародного пользования, бесплатно.
Есть смелые, или только реплики опять будут.
Я не переживаю, мне просто непонятен подход "ничему не хочу учится"
Потому как любая инженерная работа требует постоянного изучения чего то нового.
продукты делаются для продаж
Я уж и не упомню сколько сделал прог лично для себя, да и по описанию очень напоминало задачку из курса программирования.
но чего я хотел добиться работает,
Ну замечательно, я рад за вас. Только вот в следующий раз опять начнете эксперименты.
Всё что я хотел - дать вам базовые понятия, что бы в следующий раз было проще. Но вы отчего то страшно сопротивляетесь.
софтину для симулятора X-Plane
это не то?
https://github.com/nasa/XPlaneConnect
А так, не вижу смысла делать то, что мне совершенно не нужно и неинтересно.
реплики засранцев теоретиков,
это, видимо, меня имелось ввиду. я вас сперва за хитроумного весельчака-разводилу принял, но после вашего юношеского всплеска сознания верю, что вы никого не разводите, а просто то, во что я не хотел верить. или очень хороший психолог, и продолжение развода очень тонко разыграли, и я ведусь, как и все. но это теперь вряд ли.
письками предлагаете помериться? у вас длинее, не возражую. и толще. и тычете вы ею во все дырки, а вдруг где-то совпадет. не стоит только, вот в этом и вся проблема.
и не "неправильный подход" у вас, а вообще отсутствие всякого подхода. вот попробуйте себе вообразить, что физику в школе учат, предлагая прыгнуть с зонтиком с этажа эдак третьего, или два гвоздя в руки и - в
розетку. а это как раз то, что вы пытаетесь проделать. вы прочли хотя бы какую-нибудь книжку для даммиз (попробуйте, а вдруг потянете?). судя по тому, как безграмотно вы пишете, читать вы вообще не любите. больше в симуляторах сидите. научитесь хотя бы азы понимать той области, в которой пытаетесь что-то сделать, в гугле вашу проблему сформулировать (например, sleep in c#; c# convert string to int), а вы почему-то решили, что у вас такая толстая и длинная писька (хотя и не стоячая), что у вас и так все получится. отсюда и все беды. но ничего, дерзайте, и мир будет у ваших ног, когда увидит ваши флай-стимуляторы, которые вы соберете из советов хороших людей : )
Ребята,
давайте жить дружно!
Если будет стоять вопрос: "научите меня, как решить ту или иную проблему", тогда учите.
А если стоит вопрос: "показать на конкретном примере", тогда кто может покажите, кто не может проходит мимо.
Зачем глумиться.
Многие не поняли что требуется и начали кидать реплики, что сложного просто пройти мимо.
Может я не правильно понял и здесь могут открываться темы только теми людьми, которые имеют определённые знания.
Прежде чем открыть тему, я пытался найти ответы на мои вопросы здесь в FAQ.
минимальные знания имеются,
иначе бы вообще никаких вопросов не возникало,
оставляем теорию и переходим к практическим занятиям.
Не надо судить людей по своему уровню знаний, каждый в чем то пофан.
Ноев Ковчег был построен любителями,
профессионалы построили Титаник.
Сколько лет практики тебе потребуется, чтобы самостоятельно докопаться до #80и почему ты это не сделал сам?
Сколько нужно будет, столько и потребуется.
Murr, при всём уважении к твоим знаниям и подсказкам, планку опусти пожалуйста.
У тебя и у других нет достаточной информации, что бы судить меня.
Всё что я делаю, вы не видели, да и не нужно вам.
Запретить мне чем то увлекаться, тоже ни у кого не получится, как бы вы меня не гнобили.
Нос задирать, если вы чего то больше других знаете или умеете, просто не прилично.
Ещё раз для всех, ни кто ни кого не заставляет, есть интерес привести конкретные примеры, буду при много благодарен.
Нет интереса, проходим мимо, без комментариев.
Сколько нужно будет, столько и потребуется.
нет достаточной информации
-----
У тебя в обоих высказываниях ошибки.
В первом случае - методом тыка найти ту информацию невозможно. Она просто вне той области где можно потыкать - надо точно знать где и что искать.
Во втором - тоже ошибаешься - совершаемые новичками ошибки давно классифицированы и методы их исправления тоже не секретны... как и способы контроля.
планку опусти пожалуйста.
-----
Не могу. Мне не интересно работать с низкой планкой. Мне интересно помогать расти до моего уровня...
Запретить мне
-----
Хммм... Я тебе что-то запрещал?
как бы вы меня не гнобили.
-----
Тебе, кстати, были заданы два простых вопроса - ответов пока не получено.
Вопросы были совершенно примитивные - на проверку понимания того чем пользуешься.
Если это оценивается как - гнобили - ну что же - не буду больше задавать вопросов.
Но не задав вопросов и не получив ответов, увы, не возможно понять что именно ты
не понимаешь (я не говорю про не знаешь - я говорю про не понимаешь) и, соответственно,
ткнуть тебя в нужные доки не получится...
Всё что я делаю, вы не видели, да и не нужно вам.
Вообще то, достаточно того что мы тут видели, как идет процесс разработки и какие получаются результаты.
То что Вы считаете гноблением просто попытка дать вам нечто большое. Ведь написать конкретный код это самое простое, что может быть здесь. Написал и забыл.
Программирование - это не обучение езды на одноколесном велосипеде, когда набив море шишек можно чему то научится.
Да даже и там нужно иметь некий набор базовых знаний, вот этот то набор Вам и хотели дать, но такого яростного сопротивления я еще никогда не встречал.
Ведь проблема то у Вас не в малом знании языка, для понимания которого и нужны конкретные примеры, а в полном отсутствии понятия алгоритма, вы его просто заменяете понятием, попробую так или так.
Я может приготовлением еды увлекаюсь, и когда какой то повар скажет мне, давай я тебе расскажу базовые знания по приготовлению еды, я никогда не буду брыкаться и говорить пошел вон, я поваром быть не собираюсь. Потому как вроде ясно, что для увлечения это тоже очень полезно.
прикольно moose,
давай оставим подь....ки, согласен?
Идём дальше. :))))
в файле есть значения:
-0.5
0
0.5
1
читаются в ar[1] "0" и "1" без проблем, а вот с "-0.5" и "0.5" проблемa.
код:
int param;
var lines = System.IO.File.ReadAllLines("data\\" + lbl_aircraft_name.Text + "\\test.cfg");
foreach (var line in lines)
{
var text = line.Split(',')[0];
checkedListBox1.Items.Add(text);
var matches = Regex.Matches(line, @"([\w+\s*\/\[\]]+,[\s*>?.?\d]+)");
foreach (Match match in matches)
{
var ar = match.Value.Split(',');
int.TryParse(ar[1].Trim(), out param);
MessageBox.Show(param.ToString());
//SendXPCommands(ar[0], param);
}
}
если конвертирую в decimal, позитивные "0.5" читает, негативные "-0.5" не читает.
var x = Convert.ToDecimal(ar[1]);
MessageBox.Show(x.ToString())
в http://rubular.com не разберусь как добавить распознание негативных значений.
кто может
подредактировать "([\w+\s*\/\[\]]+,[\s*>?.?\d]+)"
файл с числами изменю на все децимальные значения:
-0.5
0.0
0.5
1.0
думаю если подредактировать "([\w+\s*\/\[\]]+,[\s*>?.?\d]+)",
и конвертиравать "ar[1]" в decimal и потом результат передать в "int param"?
"int.TryParse(ar[1].???? out param) то должно всё получиться.
ребят, если мысли какие есть, на конкретном примере покажите и просьба не отправлять меня за парту.
это всё на любительской основе делается.
Regex.Matches
убрал это, но проблема осталась,
что например в int 0.5 выглядеть должно 2f/4,
что то туплю.
посмотрите код:
int param;
var lines = System.IO.File.ReadAllLines(@"test.cfg");
foreach (var line in lines)
{
var ar = line.Split(',');
double value = double.Parse(x.ToString());
int.TryParse(value.ToString(), out param)
MessageBox.Show(value.ToString());
SendXPCommands(ar[1], param);
в int.param узнаёт 0 и 1, а -0.5, 0.5 не узнаёт,
как то надо форматировать -0.5, 0.5 в 2f/4, -2f/4.
что например в int 0.5 выглядеть должно 2f/4,
------
LOF...
посмотрите код:
-----
Зачем?
Ну ладно - когда насмеемся и из-под стола вылезем - может и посмотрим...
что то туплю.
-----
Разумеется. Стоит почитать что-нибудь по типам данных в шарпе...
-----
Показать - не могу. Потому как это невозможно.
И обучить тебя тому что объясняет почему это не возможно - тоже не могу - ты просишь этого не делать.
Так что остается два варианта - либо ты изучаешь необходимое самостоятельно и тем способом которым хочешь, либо... ищешь какие-то курсы где тебе это объяснят.
Ну и конечно ничто не мешает как следует по применять "метод тыка" до того как начнешь изучать необходимое.
Сам то можешь?
-----
Не знаю - Я до сих пор не видел полного определения задачи.
У меня вот сейчас в работе практически такая же задача - кучка текстовых файлов, надо нарезать на куски по непонятным правилам и переконвертировать в удобную для использования форму.
Думаю, что к вечеру будет что-то рабочее...
Погнали?
Работа не хрен, стояла и будет стоять!:))
займись лучше этим:
число -0.5/0.5 перевести в int.
как готово будет, можешь по работе делать дальше. :))
double d_param = double.Parse(ar[2]);
MessageBox.Show(d_param.ToString());
всё правильно показывает.
В int как это грёбаное "-0.5", "0.5" предать?
число -0.5/0.5 перевести в int.
Ты понимаешь, что int - это целое число? В то время как 0.5 - это число с плавающей точкой, т.е. не целое и состоит оно из целого числа + дробная часть (т.е. 0 + 0.5). Приводя число с плавающей точкой к целому числу, дробная часть просто отбрасывается.
0.5 (double) = 0 (int) + 0.5 (double) = 0 (int)
1.5 (double) = 1 (int) + 0.5 (double) = 1 (int)