Форум программистов, компьютерный форум, киберфорум
Haskell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
9 / 9 / 0
Регистрация: 22.12.2017
Сообщений: 295

Чтение файла, регулярные выражения

22.01.2019, 15:59. Показов 2707. Ответов 11

Студворк — интернет-сервис помощи студентам
Приветствую всех. Как можно открыть текстовый файл, применить к содержимому эти регулярные выражения
Haskell
1
2
3
4
$alpha = [a-zA-Z]
$digit = [0-9]
$hex = [0-9a-fA-F]
$bin = [0-1]
и вывести результат?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.01.2019, 15:59
Ответы с готовыми решениями:

Регулярные выражения и проверка строки на цифру (Elixir)
Я решаю задачу и не могу понять как написать регулярное выражение условие: ...

Функция-анализатор, которая распознает регулярные выражения
Помогите пожалуйста написать функцию-анализатор reg, которая распознает регулярное выражение, - значение типа RE. Например, используя...

Чтение файла в потоке и регулярные выражения
Доброго времени! Дали задание написать небольшой парсер из файла. Файл не текстовый, а результат работы аппаратной системы (в нем...

11
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38168 / 21103 / 4307
Регистрация: 12.02.2012
Сообщений: 34,692
Записей в блоге: 14
22.01.2019, 16:06
Вот статья, правда на английском.
1
9 / 9 / 0
Регистрация: 22.12.2017
Сообщений: 295
22.01.2019, 16:14  [ТС]
Catstail, мало что понятно.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38168 / 21103 / 4307
Регистрация: 12.02.2012
Сообщений: 34,692
Записей в блоге: 14
22.01.2019, 16:32
Вот примерно так:

Haskell
1
2
3
4
5
6
7
8
9
10
import Text.Regex.Posix
 
sten1 :: String -> String -> Bool
sten1 test patt = test =~ patt
 
sten2 :: String -> String -> String
sten2 test patt = test =~ patt
 
sten3 :: String -> String -> (String,String,String)
sten3 test patt = test =~ patt
А теперь в консоли:

Haskell
1
2
3
4
5
6
7
8
9
10
11
*Main> sten1 "foodiebar, fooquuxbar" "(foo[a-z]*bar|quux)"
True
it :: Bool
 
*Main> sten2 "foodiebar, fooquuxbar" "(foo[a-z]*bar|quux)"
"foodiebar"
it :: String
 
*Main> sten3 "foodiebar, fooquuxbar" "(foo[a-z]*bar|quux)"
("","foodiebar",", fooquuxbar")
it :: (String, String, String)
1
9 / 9 / 0
Регистрация: 22.12.2017
Сообщений: 295
22.01.2019, 17:18  [ТС]
Catstail, при компиляции выдает ошибку:
cd.hs:1:1: error:
Could not find module ‘Text.Regex.Posix’
Use -v to see a list of the files searched for.
|
1 | import Text.Regex.Posix | ^^^^^^^^^^^^^^^^^^^^^^^
Нужно подключать какие-то дополнительные библиотеки?
"А теперь в консоли:", вот тут я уже окончательно запутался.
Раньше не имел таких серьезных дел с хаскелем, литературы годной, которая это все объясняет на пальцах найти не могу.
0
Модератор
 Аватар для Curry
5155 / 3475 / 536
Регистрация: 01.06.2013
Сообщений: 7,535
Записей в блоге: 9
22.01.2019, 17:51
Цитата Сообщение от Encrypted1010 Посмотреть сообщение
Нужно подключать какие-то дополнительные библиотеки?
Да, нужно подключить пакет regex-posix.
А вот как это сделать зависит от того, какой компилятор (или не компилятор) Haskell вы используете. И на какой ОС.
Обычно, лучше создать проект, пусть и с одним исходным файлом, и в конфигурации проекта прописать этот пакет, который загрузится при первой сборке.
Вот тут https://www.ohaskell.guide/setup.html
правда описывается установка утилиты stack для macOS, но там есть ссылка на установку stack-a в разных ОС.
https://haskell-lang.org/get-started

В общем, когда создадите проект, там будет файл ИмяПроекта.cabal и внутри после строки с build-depends: добавить строку
сохраняя отступ, например
Haskell
1
2
  build-depends:       base >= 4.7 && < 5
                      ,regex-posix
1
9 / 9 / 0
Регистрация: 22.12.2017
Сообщений: 295
22.01.2019, 17:54  [ТС]
Curry, спасибо, сейчас буду разбираться. А что касается кода из ответа выше, он разделен на две части. Я не совсем понимаю для чего. Можете объяснить?
0
Модератор
 Аватар для Curry
5155 / 3475 / 536
Регистрация: 01.06.2013
Сообщений: 7,535
Записей в блоге: 9
22.01.2019, 18:07
Цитата Сообщение от Encrypted1010 Посмотреть сообщение
А что касается кода из ответа выше, он разделен на две части. Я не совсем понимаю для чего.
Первая часть в файле .hs, вторая ввод команд в интерпретатор (https://ru.wikipedia.org/wiki/REPL) c его сообщениями. Первая часть, предварительно загружена в интерпретатор.
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38168 / 21103 / 4307
Регистрация: 12.02.2012
Сообщений: 34,692
Записей в блоге: 14
22.01.2019, 18:10
Вот небольшой пример, в котором читается файл (имя задается в командной строке первым параметром) и печатаются все строки, которые удовлетворяют шаблону (задаваемому в командной строке вторым параметром):

Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import System.IO
import System.Environment
import Text.Regex.Posix
 
sten1 :: String -> String -> Bool
sten1 test patt = test =~ patt
 
--sten2 :: String -> String -> String
--sten2 test patt = test =~ patt
 
--sten3 :: String -> String -> (String,String,String)
--sten3 test patt = test =~ patt
 
main = do
       (fnam:patt:etc) <- getArgs
       handle <- openFile fnam ReadMode
       contf <- hGetContents handle
       mapM putStrLn (filter (\ t -> (sten1 t patt)) (lines contf)) 
       hClose handle
1
Модератор
 Аватар для Curry
5155 / 3475 / 536
Регистрация: 01.06.2013
Сообщений: 7,535
Записей в блоге: 9
22.01.2019, 20:00
проще
Haskell
1
2
3
4
main = do
       (fnam:patt:_) <- getArgs
       contf <- readFile fnam
       mapM putStrLn (filter (\ t -> (sten1 t patt)) (lines contf))
1
9 / 9 / 0
Регистрация: 22.12.2017
Сообщений: 295
22.01.2019, 20:31  [ТС]
Curry, а как быть с регулярными выражениями? Где они задаются?
0
Модератор
 Аватар для Curry
5155 / 3475 / 536
Регистрация: 01.06.2013
Сообщений: 7,535
Записей в блоге: 9
22.01.2019, 21:42
Encrypted1010, я привёл только изменённую функцию main. Всё что выше неё подразумевается то же что у Catstail.

Добавлено через 8 минут
При выполнении программы первый аргумент - имя читаемого файла, второй - само регулярное выражение. Вот
Haskell
1
       (fnam:patt:_) <- getArgs
в этой строчке указано разобрать аргументы командной строки. первый - fname, второй - patt, остальные аргументы, если есть, игнорируем.
Если не хотите вводить из командной строки, то можете прямо в коде программы (вместо вышеприведённой строки)
Haskell
1
2
       let fnam = "inputfile.txt"
           patt = "(foo[a-z]*bar|quux)"
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.01.2019, 21:42
Помогаю со студенческими работами здесь

Запись/Чтение файла, массив строк, регулярные выражения
Привет ребята, столкнулся с такой задачей. Записываю данные в файл с помощью textBox и numericUpDown. Получается все с новой строки, а...

ЧПУ. Замена строк, регулярные выражения. Как правильно использовать переменную в регулярные выражения ?
Здравствуйте! Решил реализовать ЧПУ на своем сайте. Первый этап это замена всех реальных ссылок на чпу ссылки. Так вот при замене я...

Регулярные выражения sql (путь файла)
Всем доброго времени суток! Требуется с помощью регулярных выражений (или, если есть другой вариант, то как-то по-другому) разбить путь...

Регулярные выражения: извлечение из файла номеров телефонов
Реализовать программу, извлекающую из файла номера телефонов. Требования: 1. исходный текст, из которого нужно выбрать все номера ...

Регулярные выражения. Вытащить Имена и фамилии из текстового файла
Вытащить из текста с помощью регулярных выражений имена и фамилии.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru