опять проблемка в 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]
или что-то подобное, а определять в этом случае позиции динамически и, видимо, добавить дополнительный цикл обработки таких пар в строке.
-----
Потому тебе даются две вещи - где-то код над которым надо поработать, а где-то подсказка, по которой надо хорошо покопаться в доках.
Когда-нибудь, если будешь ковырять это дело самостоятельно... а большинство из нас не изучали это дело во время учебы - его просто не было в природе... дойдешь до чего-то полезного.