Удаление дополнительных цитат из строк в Haskell - PullRequest
0 голосов
/ 04 мая 2011

эй, в моем файле у меня есть строка, подобная этой

"Dave", "Zoe", "Amy", "Bill", "Ian", "Kevin", "Emma", "Sam", "Megan"

при обработке и hgetline, чтобы изменить его на строку, которая заставляет его перейти к

"\"Dave\", \"Zoe\", \"Amy\", \"Bill\", \"Ian\", \"Kevin\", \"Emma\", \"Sam\", \"Megan\""

Я, очевидно,не может сделать [putStr String], потому что putStr - это IO ()

, есть ли способ избавиться от \ или чего-то еще.

спасибо

Ответы [ 2 ]

2 голосов
/ 04 мая 2011

Предположим, что вы читаете строки из файла, который содержит:

"Dave", "Zoe", "Amy", "Bill", "Ian", "Kevin", "Emma", "Sam", "Megan"

Когда это читается через, например, readFile или getLine, эти кавычки тоже будут в вашей строке.

Затем вы можете продолжить и обработать строку так, как хотите. Например, разделив его на пробелы и удалив дополнительные символы кавычек:

> map (filter (/='"')) (words s)
["Dave,","Zoe,","Amy,","Bill,","Ian,","Kevin,","Emma,","Sam,","Megan"]

См. Дополнительные ответы по обработке списка f или несколько примеров .

0 голосов
/ 04 мая 2011

Если эти строки были напечатаны с show, что они, вероятно, были, учитывая ваш предыдущий вопрос, попробуйте прочитать их с read. Функция read противоположна show и отменяет ее эффект, то есть удаляет кавычки и не экранирует экранированные символы.

EDIT:

Извините, я недостаточно внимательно прочитал вопрос. Кажется, у вас еще нет проблем. : D Представленная вами строка, очевидно, является выводом из ghci, а настоящая строка не содержит косых черт. Тем не менее, я все же предполагаю, что вы хотите прочитать отдельные имена в вашей программе, для чего вам потребуется read. Чтобы использовать его, вам придется сначала разбить строку на запятые. Однако, если любое из имен содержит запятую, это становится нетривиальным.

Самое простое решение, которое я вижу для этого, состоит в том, чтобы добавить «[», append «]» и позволить функции read обрабатывать все. Как это:

readList :: String -> [String]
readList str = read ("[" ++ str ++ "]")

Предполагается, что вы напечатали их с showList из предыдущего вопроса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...