Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.05.2011, 15:44   #1
SaNeKBF
Пользователь
 
Аватар для SaNeKBF
 
Регистрация: 17.12.2010
Сообщений: 35
По умолчанию Пишу обработчик команд

Задумка простая. Читаю построчно с текст бокса команды.
И потом программа их выполняет.
1 слово в текст боксе - команда, остальные параметры. (пример: wait 2000) ждет 2 сек.
Запутался. Немогу правильно прочитать текст. Разделить его на части.
Добавляю код и исходник с коментариями.
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;

//Допустимые символы: 0-9 и A-z, А-я, остальные считаются разделителями.
//n - номер по счету слова (начиная с 0 ! )
//GetWord(s,-1) возвращает весь текст после первого слова
//Возвращает "" если нет слова под номером n (например, конец строки) 
//Первое слово - комманда, остальные - параметры.
//Команда состоит из 1 слова. Правило синтаксиса: 2 и более слов разделяются знаком "_" , например, end_if
//если первое слово не команда, то эта строка считается комментарием


namespace PereborStroki
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Obrabotchik();
        }

        private void Obrabotchik()
        {
            if (mmScript.Text == "") //если скрипта нету отжать кнопку старт и выйти с процедуры
            {
                //btStart.Down = false;
                mmScript.Enabled = true;
            }
            else
            {
                //перебираем все строки скрипта
                for (int i = 0; i < mmScript.Lines.Count(); i++)
                {
                    Thread.Sleep(Convert.ToInt32(edPause.Text)); // пауза между строками скрипта
                    if (mmScript.Lines[i] == "") // текущая строка пустая
                        continue; //
                    //Если нажата пауза ждать   if (doScript==false) {btStart.Down=false; mmScript.Enabled=true;}  // если отжали кнопку старта скрипта
                    string s = mmScript.Lines[i]; //текущая строка
                    //--- сейчас надо выделить первый символ в строке
                    int sel = 0;
                    for (int k = 0; k < i; k++)
                    {
                        sel += mmScript.Lines[k].Length + 2;
                    }
                    mmScript.Select(sel, 1); //выделяем первый символ в строке
                    //----- далее обрабатываем команды -----
                    string command = GetWord(s, 0);
                    if (command == "wait")
                    {
                        int time = Convert.ToInt32(GetWord(s, 1));
                        Thread.Sleep(time);
                        label1.Text = Convert.ToString(time);
                        

                    }
                }
            }
        }

        private string GetWord(string s, int n)
        {
            // ts - текущее слово, tn - текущий номер слова в строке
            // Перебираем по очереди все символы, Если легальный = ['0'..'9','A'..'z','А'..'я'], то добавляем в ts. Если нелегальный, то если до него тоже был нелегальный, то далее. Если нелегальный, но ts!="" (т.е. заполняли), то возможно это наше искомое слово, проверим его номер.
            int tn = 0; string ts = "";             // обнуляем на всякий случай
            for (int i = 1; i < s.Length; i++)
            {
                //Добавить проверку на легальность символа, латиница и кирилица и потом s[i] in LegalSymbols или n == -1
                if (n == -1 & tn == 1)
                {
                    ts += s[i]; //увеличиваем допустимую строку
                }
                if (ts == "") continue;
                if (tn == n) break; //получили искомое слово
                //слово кончилось, но это не нашь номер слова. Увеличиваем счетчик и очистим ts
                ts = "";
            }
                if (n == -1 || n == tn)
                    return ts;
                else
                    return "";
        }

        private void button1_Click_1(object sender, EventArgs e)
        {

        }



    }
}
Вложения
Тип файла: rar PereborStroki.rar (40.1 Кб, 4 просмотров)
SaNeKBF вне форума Ответить с цитированием
Старый 24.05.2011, 16:23   #2
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

Мне кажется можно проще. Например, есть файл со следующими строками:
wait 2000
run calc.exe

Считываем его построчно, допустим текущая строка line.
Код:
string[] args = line.Split(" "); // разбиваем строку на массив, где разделитель пробел
if (args[0]  == "wait")
{
Thread.Sleep(Convert.ToInt32(args[1]));
}
if (args[0] == "run")
{
...
}
и т.д.
Hollander вне форума Ответить с цитированием
Старый 24.05.2011, 19:20   #3
jupy
 
Регистрация: 24.05.2011
Сообщений: 4
По умолчанию

Почему-то начинающие очень часто игнорируют такие методы как

String.Split()

или

String.IsNullOrEmpty()


Не стоит. Если использовать эти методы чаще, ваш код будет проще и понятнее. Зря, что-ли спецы из Microsoft-та их выдумывали.
jupy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
дизассемблирование команд [MI_nor] Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 23.05.2011 02:19
реализация команд с помощью набора других команд zhenyaa Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 08.11.2009 21:37
Список команд W0LF Общие вопросы Delphi 1 18.08.2009 09:28
Формат команд Drunk_Dogg Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 22.12.2008 15:39
Делаю сайты, пишу маленькие/большие скрипты. Пишу веб-приложения и приложения под Windows. SkyM@n Фриланс 3 29.12.2007 16:21