Я пытаюсь выучить D, но борюсь с отсутствием документации (или моим пониманием этого), поэтому я пришел сюда. Сегодня я уже задавал другой, но не связанный с этим вопрос.
Во всяком случае, здесь идет:
Я бы хотел разобрать строку для разных вещей.
Формат строки примерно такой:
[<label>] <mnemonic> [parameters]
Если метки нет, есть обязательные пробелы. Параметры могут быть разделены запятыми. Типы параметров зависят от мнемоники.
Я хотел бы использовать std.conv: parse
из библиотеки Фобоса, чтобы помочь мне, но я не понимаю документации о том, как анализировать «слово», как, например, некоторые символы, разделенные пробелами на обоих концах. Он отлично работает для целых чисел и тому подобное, как int i = parse!int(line)
. Но если бы я сделал string s = parse!string(line)
, он бы захватил всю строку.
Я анализирую это вручную, используя char**
(или ref string
) в качестве типа данных, точно так же, как я делал, когда писал это в C. Но я учусь D, чтобы не делать этого.
Я пытался сделать что-то подобное, чтобы сделать это вручную:
string get_word(ref string s)
{
int i = 0;
while (i < s.length && isAlphaNum(s[i]))
i++;
string word = s[0 .. i];
s = s[i+1 .. $];
return word;
}
Это хороший способ сделать это? Есть ли более чистый способ? Более быстрый способ? Возможно, более безопасный путь? Я не уверен, что индекс i+1
всегда существует.
Спасибо за помощь!
Моя вера в D уже немного истощается, так как я столкнулся с всевозможными проблемами. Но путь наверняка будет стоить того.