Command() парсер

Здесь можно найти готовые «кирпичики» — части кода, пригодные для построения более крупных проектов, а также решения различных типовых и не очень задач на VB.

Модератор: Brickgroup

Powerman
Новичок
Новичок
 
Сообщения: 41
Зарегистрирован: 20.11.2005 (Вс) 2:43

Command() парсер

Сообщение Powerman » 15.04.2006 (Сб) 1:46

Парсер коммандной строки и дальнейшее выполнение определённых функций.

Запускаеться таким образом:
Код: Выделить всё
cmdparse Command()

В конце модуля нужно отредактировать все CASE по своему вкусу :)
Если кто хочет помочь по оптимизации и модернизации - буду очень рад :)
Вложения
cmdparse.zip
(1.09 Кб) Скачиваний: 129
=))

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 15.04.2006 (Сб) 5:03

Powerman
Ты меня, конечно, извини, но в чём смысл? Особенно при наличии script control?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 15.04.2006 (Сб) 16:38

А вот мой парсер, переведённый GSerg-ом с C#:
Код: Выделить всё
  ''' <summary>Command-line parser</summary>
  ''' <remarks>Accepts command-line formatted like <c>-a 1 -b xyz -gh file1 file2</c>.</remarks>
  ''' <example><code>
  ''' Dim args As CmdLineArgs = new CmdLineArgs (_args)
  ''' For Each name As String In args.AllKeys
  '''   Console.WriteLine(name + "=" + args(name))
  ''' Next
  ''' For Each name As String In args.Files
  '''   Console.WriteLine("file: " + name)
  ''' Next
  ''' </code></example>
  Public Class CmdLineArgs
    Inherits NameValueCollection

    Public Files As ArrayList = New ArrayList

    Public Sub New(ByVal args() As String)
      MyBase.New(CaseInsensitiveHashCodeProvider.Default, Comparer.Default)

      Dim file As Boolean = False
      Dim lastopt As Char = ControlChars.NullChar

      For Each s As String In args
        If Not file AndAlso s.Chars(0) = "-"c Then 'an option
          Dim options() As Char = s.ToCharArray(1, s.Length - 1)
          For Each c As Char In options
            Me(c) = ""
            lastopt = c
          Next
        ElseIf lastopt <> ControlChars.NullChar Then 'a parameter
          Me(lastopt) = s
          lastopt = ControlChars.NullChar
        Else 'a file
          file = True 'everything left is files
          Files.Add(s)
        End If
      Next
    End Sub

    ''' <summary>Parameter by its letter</summary>
    Default Public Overloads Property Item(ByVal Index As Char) As String
      Get
        Return MyBase.Item(Index.ToString())
      End Get
      Set(ByVal Value As String)
        MyBase.Item(Index.ToString()) = Value
      End Set
    End Property

    ''' <summary>Removes parameter by its letter</summary>
    Public Overloads Sub Remove(ByVal index As Char)
      MyBase.Remove(index.ToString())
    End Sub
  End Class
Изображение

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 15.04.2006 (Сб) 18:23

Может мне ещё свой выложить? Так сказать - для полноты картины? :roll:
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 15.04.2006 (Сб) 18:25

Пока в профиле пользователя нет графы "парсер командной строки", придётся складывать их все здесь :lol:
Изображение

Powerman
Новичок
Новичок
 
Сообщения: 41
Зарегистрирован: 20.11.2005 (Вс) 2:43

Сообщение Powerman » 16.04.2006 (Вс) 1:46

2GSerg: ничё всё ок, я ж ведь не профи, я тренируюсь. кстати, парсер коммандной строки мне недавно пригодился в моём проекте. но только я не пойму, где тут script control ? :((( :?
=))

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 16.04.2006 (Вс) 6:15

Script Control делает то, что ты пытаешься сделать своим парсером.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Powerman
Новичок
Новичок
 
Сообщения: 41
Зарегистрирован: 20.11.2005 (Вс) 2:43

Сообщение Powerman » 17.04.2006 (Пн) 16:41

GSerg писал(а):Script Control делает то, что ты пытаешься сделать своим парсером.
:) понятно спасибо за пояснение, бо я Script Control никогда не использовал
=))

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 18.04.2006 (Вт) 17:46

BV писал(а):Может мне ещё свой выложить? Так сказать - для полноты картины? :roll:


Мой парсер командной строки.
Вложения
CmdParser_.rar
(8.42 Кб) Скачиваний: 142
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;


Вернуться в Кирпичный завод

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

    TopList