Когда задан список значений, разделенных запятыми, таких как 3, asdf, *#, 1212.3
, я хотел бы извлечь каждое из этих значений, не включая запятую, поэтому у меня будет список значений, например [3, "asdf", "*#", 1212.3]
(а не как текстовое представление как это, но как массив «хитов»). Как мне это сделать?Извлечение значений из списков, разделенных запятыми
ответ
Прежде всего, если вы имеете дело с файлами CSV, не используйте регулярное выражение или собственный синтаксический анализатор. В основном, когда вы думаете, что все просто, они действительно не являются, Stop Rolling Your Own CSV Parser.
Далее вы говорите, что хотите иметь массив ([3, "asdf", "* #", 1212.3]). Это похоже на смешивание типов и не может быть сделано на статическом языке. И в конечном итоге очень неэффективно даже с использованием std.variant. Для каждого проанализированного значения вы быть_наст код:
try {
auto data = to!double(parsedValue);
auto data2 = to!int(data);
if(data == data2)
returnThis = Variant(data2);
else
returnThis = Variant(data);
} catch(ConvException ce) { }
Теперь, если данные истинно разделена некоторые определенный набор символов, а не разбиваются на запись с новой строкой, то вы можете использовать раскол (» , ") из std.algorithm. В противном случае используйте парсер CSV. Если вы не хотите следовать стандартным оберткам парсера, чтобы данные были вами. В вашем примере у вас есть пробелы, которые не должны игнорироваться в формате CSV, поэтому вызовите strip() на выходе.
В the article I linked упоминается, что обычно происходит то, что люди будут писать парсер в его простейшей форме и не обрабатывать более сложные случаи. Поэтому, когда вы ищете парсер CSV, вы найдете много, которые просто не режут его. Это написание собственного парсера, который я говорю, прекрасно обрабатывает все допустимые файлы CSV.
К счастью, вам не нужно писать свои собственные, так как я изящно сделал CSV Parser for D. Проверка ошибок в настоящее время не выполняется, я не знаю, как лучше всего сообщить о таких проблемах, что синтаксический анализ может быть исправлен и продолжен. Примеры использования найдены в блоках unittest. Вы также можете анализировать структуру:
struct MyData {
int a;
string b;
string c;
double d
}
foreach(data; csv.csv!MyData(str)) // I think I'll need to change the module/function name
//...
в perl вы могли бы сделать что-то вроде:
@anArray = split(',', "A,B,C,D,E,F,G");
Что делать, если некоторые поля CSV имеют запятую? например. `` my, first, field "," my, second, field "," my, third, field ", который полностью легален в CSV. – Asaph 2010-12-16 04:49:25
В любом случае OP использует язык программирования D. Поэтому ответ perl не имеет значения. – Asaph 2010-12-16 04:50:01
Я вижу, что вы используете язык программирования D. Вот ссылка на CSV parser for D.
(?:,|\s+)?([^ ,]+)
следует делать. Он пропускает запятую или пробел, затем выбирает что угодно, кроме запятой или пробелом. Измените вкус.
- 1. извлечение разделенных запятыми строк
- 2. Извлечение значений, разделенных запятыми, из строки, исходящей из сообщения HTTP
- 3. Генерация значений, разделенных запятыми
- 4. Извлечение разделенных запятыми значений из данных JSON с помощью jQuery
- 5. Извлечение нескольких значений из отдельных полей uitext, разделенных запятыми
- 6. Split значений, разделенных запятыми
- 7. разделенных запятыми значений - Проблема
- 8. Извлечение слова из разделенных запятыми в оракула
- 9. PHP MYSQL - Сравнить 2 разделенных запятыми списков
- 10. C++ добавление значений, разделенных запятыми
- 11. Показать имена из разделенных запятыми значений
- 12. подсчета значений, разделенных запятыми из колонки - SQL
- 13. Получение имя из значений, разделенных запятыми
- 14. удалить значение из значений, разделенных запятыми,
- 15. разделенных запятыми значений в блоке
- 16. Regexp захватить разделенных запятыми значений
- 17. Разделение разделенных запятыми значений (CSV)
- 18. Обратный порядок разделенных запятыми значений
- 19. Сохранение 3 списков текста, разделенных запятыми
- 20. Сортировка разделенных запятыми списков по алфавиту PHP
- 21. Обработка значений разделенных запятыми значений в VBA
- 22. Запишите типы разделенных запятыми списков идентификаторов?
- 23. разделенных запятыми
- 24. Сумма разделенных запятыми значений в Oracle SQL
- 25. Объединение таблицы на основе значений, разделенных запятыми
- 26. Обработка значений, разделенных запятыми, в oracle
- 27. Сравнение трех значений, разделенных запятыми, в SQL
- 28. сравнить разделенных запятыми значений в SQL
- 29. Ввод значений данных, разделенных запятыми, в строку
- 30. разделенных запятыми
На каком языке программирования? – Asaph 2010-12-16 04:42:28
Язык программирования D. – 2010-12-16 04:43:04