Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

опять проблемка в C#

1140  1 2 3 4 5 6 7 все
beautiful_man посетитель23.11.17 17:19
23.11.17 17:19 

что то совсем запутался, кто подскажет, если не трудно.

в текстовом файле есть записи по строчно:

"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("Конец потока достигнут.");
}
}





#1 
Murr патриот23.11.17 17:47
Murr
NEW 23.11.17 17:47 
в ответ beautiful_man 23.11.17 17:19, Последний раз изменено 23.11.17 17:48 (Murr)

string[] splitted = input.Split(new char[] {','});

int code = Convert.ToInt32(splitted[2]);

SendXPCommands(splitted[0], code);


С рук без проверки - могут быть опечатки.

#2 
beautiful_man посетитель23.11.17 17:54
NEW 23.11.17 17:54 
в ответ Murr 23.11.17 17:47, Последний раз изменено 23.11.17 17:58 (beautiful_man)

Спасибо!

здесь ругался

string[] splitted = input.Split(new char[] { ',' });

заменил на

int code = Convert.ToInt32(splitted[1]);

работает.


но отпровляет команды все вместе, нужно одну за другой с небольшой остановкой


#3 
Murr патриот23.11.17 18:12
Murr
NEW 23.11.17 18:12 
в ответ beautiful_man 23.11.17 17:54

Thread.Sleep(time_to_sleep);

#4 
beautiful_man посетитель23.11.17 19:23
NEW 23.11.17 19:23 
в ответ Murr 23.11.17 18:12

Не хочет поочерёдно вписывать в 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.

#5 
Murr патриот23.11.17 19:35
Murr
NEW 23.11.17 19:35 
в ответ beautiful_man 23.11.17 19:23

А контрол за тебя кто перерисовывать будет?

#6 
beautiful_man посетитель23.11.17 20:10
NEW 23.11.17 20:10 
в ответ Murr 23.11.17 19:35

Я как тот пёс, все понимаю, а написать не могу,

понимаю что нужно запрос отправить, если текст в итем вписан,

тогда галку нужно поставить.

Или запрос, то есть считать выполнена ли команда,

как соорудить такое не допру.

#7 
  moose старожил23.11.17 21:28
NEW 23.11.17 21:28 
в ответ beautiful_man 23.11.17 17:19

это в школе задали? какой класс?

#8 
AlexNek патриот23.11.17 22:14
AlexNek
NEW 23.11.17 22:14 
в ответ beautiful_man 23.11.17 17:19

Так вы уже все словами описали.

Копируйте предложения в код, а затем по одной части реализуйте.

Можете каждое предложение вначале описать как функцию, а затем уже реализовывать каждую функцию по отдельности, не думая об остальных.

#9 
beautiful_man посетитель23.11.17 23:21
NEW 23.11.17 23:21 
в ответ moose 23.11.17 21:28

ага, в той-же где ты учился,

судя по ответу, мы с тобой одноклассники:))

#10 
beautiful_man посетитель23.11.17 23:24
NEW 23.11.17 23:24 
в ответ AlexNek 23.11.17 22:14

Пока не пойму как это реализовать,

буду методом тыка пробовать.

#11 
AlexNek патриот23.11.17 23:39
AlexNek
NEW 23.11.17 23:39 
в ответ beautiful_man 23.11.17 23:24, Последний раз изменено 24.11.17 23:39 (AlexNek)

Не надо методом тыка.

У вам проблемы с языком или с пониманием алгоритма? "Забудьте" вначале про язык.

Распишите всю вашу прогу просто на русском языке, начиная с общих утверждений как уже было сделано. А затем начинайте более продвинутую детализацию каждого шага.

При этом рассматривайте исключительно один единственный шаг.

Что то типо такого:


Открыть текстовый файл
ЦИКЛ ПОКА не обнаружен конец файла
    Читаем строку из файла
    Разбираем строку на отдельные части
    Выполняем требуемые действия над частями
    Пауза 500 мс
Конец ЦИКЛ ПОКА
Закрыть текстовый файл
#12 
AlexNek патриот23.11.17 23:50
AlexNek
NEW 23.11.17 23:50 
в ответ beautiful_man 23.11.17 23:24

И пож. никогда не используйте "метод тыка" - это самое худшее что может быть.

Есть конечно, некоторые исключения, но в домашних заданиях их быть не может.

#13 
maxxxl79 прохожий24.11.17 00:19
NEW 24.11.17 00:19 
в ответ beautiful_man 23.11.17 17:19

примерно так


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})");
}
#14 
Murr патриот24.11.17 09:44
Murr
NEW 24.11.17 09:44 
в ответ maxxxl79 24.11.17 00:19

примерно так

-----

Результат - ТС скопирует решение, но, увы, ничему САМ не научится.

Готовый результат можно подсунуть тогда, когда понятно, что чел потерял интерес и не получит результат самостоятельно.

Примерно ТАК.

#15 
beautiful_man посетитель24.11.17 10:23
NEW 24.11.17 10:23 
в ответ maxxxl79 24.11.17 00:19

Спасибо, теперь более понятно как такое делать,

ребят, я не программист, так немного увлекаюсь,

и стать хорошим кодереом у же не получится, возраст и времени столько нет, хотя.........

Иногда задаю здесь кое какие вопросы, но некоторые набрасываются со своими подколками и нравоучениями,

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

большая просьба ко всем, давайте жить дружно!:)))


Murr, AlexNek, maxxxl79,

огромное спасибо вам,

если дальнейшие трудности будут, буду писать в теме.

#16 
maxxxl79 прохожий24.11.17 10:58
NEW 24.11.17 10:58 
в ответ Murr 24.11.17 09:44

ну, что можно и что нельзя, пусть решает себе сам топикстартер, в своем посте он не писал "не давайте мне ни в коем случае готового решения, а намеками, намеками..."

а насчет научится он чему-то или нет - зависит не от того, нашел ли он готовое решение, а от него самого (желания, усидчивости и мозгов).

#17 
beautiful_man посетитель24.11.17 11:11
NEW 24.11.17 11:11 
в ответ maxxxl79 24.11.17 10:58

спасибо за поддержку,

может чему и научусь. :)))

вопросик ещё один есть:

бывает так что в одной строчки есть несколько команд,

они принадлежат одному тексту.

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] до конца строчки определить сколько команд есть,

потом считать их и поочередно отправить.


Правильно ли я мыслю?


#18 
maxxxl79 прохожий24.11.17 11:28
NEW 24.11.17 11:28 
в ответ beautiful_man 24.11.17 11:11

Вам надо анализировать длину массива, который получаете в результате сплита:

var ar = line.Split(',');

Далее, если исходить из того, что текстовый параметр и числовой параметр всегда идут парами, т.е. подразумевается, что длина массива в этом случае вссегда будет четной, то и определять по парности длину и количество пар (команд и числа), чтобы не зашиваться на

ar[2]

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

#19 
Murr патриот24.11.17 11:34
Murr
NEW 24.11.17 11:34 
в ответ beautiful_man 24.11.17 10:23
ребят, я не программист, так немного увлекаюсь

-----

Потому тебе даются две вещи - где-то код над которым надо поработать, а где-то подсказка, по которой надо хорошо покопаться в доках.

Когда-нибудь, если будешь ковырять это дело самостоятельно... а большинство из нас не изучали это дело во время учебы - его просто не было в природе... дойдешь до чего-то полезного.


#20 
1 2 3 4 5 6 7 все