|
|
|
neon3 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 7.10.2015 Репутация: нет Всего: нет |
Добрый день.
Извините, если вопрос уж совсем не корректный. Только начал знакомиться с Erlang. Так что... ============================ Проблема-вопрос: Из текстового файла (utf-8) в DETS-таблицу "залит" список слов. 1. Содержание текстового файла: абажур абак абака аббат аббатство аберрация и т.д. 2. DETS-таблица создана следующим образом: dets:open_file(myfile, [{type, bag}, {repair, true}, {file , FileName}]). 3. Список слов из текст. файла сначала прочитан в список (List2). А затем, List2 залит в DETS-таблицу: lists:foreach(fun(X) -> dets:insert(myfile, {X}) end, List2), Все, вроде бы, хорошо, lookup по таблице срабатывает корректно (S - входное слово): ... Ldets1 = dets:lookup(myfile,S), Но теперь остановился на том, что не понимаю, как с этой таблицей производить операции: - перебор всей таблицы (first/next) - отбор (select ???) Подскажите, pls. Вроде бы просматривается вариант выгрузки таблицы в список через ets (и там уже манипулировать даннвми), но это уж совсем шаманство... Хотелось бы "правильно" С уважением, neon3 ================= P.S. Да. В список читается быстро: list_words_lib_get(YesSort) -> Fn_db = filename_balda_lib_words_get(), dets:open_file(myfile, [{type, bag}, {repair, true}, {file , Fn_db}]), ets:new(libdb, [named_table, set]), dets:to_ets(myfile, libdb), dets:close(myfile), L = ets:tab2list(libdb), ets:delete(libdb), L1 = lists:map(fun(X) -> tuple_to_list(X) end, L), case YesSort of false -> L1; true -> lists:sort(L1) end. И фильтрация по списку тоже вроде понятна: list_words_selection_for_char1(Ch, L) -> lists:filter(fun(X) -> case lists:nth(1,(lists:nth(1,X))) of Ch -> true; _Other -> false end end, L). Но все-таки, как можно выполнить фильтрацию по DETS-таблице ? Это сообщение отредактировал(а) neon3 - 7.10.2015, 18:27 |
|||
|
||||
tzirechnoy |
|
||||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: нет Всего: 16 |
first/next. ВНЕЗАПНО. Ну, есть ещё foldl/foldr/match(my_file, '$1') -- всё это тожэ можно использовать.
match |
||||
|
|||||
neon3 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 7.10.2015 Репутация: нет Всего: нет |
> to tzirechnoy
Спасибо, конечно. Я с документацией ознакомился: http://www.erlang.org/doc/man/dets.html И понимаю, что это принципиально возможно. Но все-таки не понял, как именно это использовать. Если возможно, то приведите конкретный пример (в контексте моего случая), pls. Могу куда-ниб в личку файлик с DETS-таблице кинуть... Это сообщение отредактировал(а) neon3 - 8.10.2015, 16:07 |
|||
|
||||
tzirechnoy |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: нет Всего: 16 |
А, то есть просто про erlang ничего не знаете. Вообще, тогда я бы советовал взять какой туториал и прорешать. Там времени один-два вечера займёт, зато потом очевидные для любителей старого функцыонального стиля концэпцыи вроде first/next, foldl и пр. для Вас тожэ станут очевидными.
Но можно и пример:
Компилировать erlc dets_test.erl, запускать erl -pa . -s dets_test |
|||
|
||||
neon3 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 7.10.2015 Репутация: нет Всего: нет |
Большое спасибо.
Буду пробовать. |
|||
|
||||
Правила форума «Функциональные языки: общие вопросы» | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Функциональные языки: общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |