Nano Hash - криптовалюты, майнинг, программирование

Haskell -> После разбора как работать со строками

Здравствуйте, после парсинга скриптом на Haskell получил файл с "внешним видом" списков строк. Однако, когда я вызываю содержимое файла с помощью функции getContents или hGetContents, т. е. читая содержимое, я получаю что-то например: Строка с линиями (схематически я хочу: "[" aaa "," bbb "" ccc "]" -> ["aaa", "bbb" «ссс»]). Я пробовал использовать функцию read, но безрезультатно. Мне нужно работать с этими списками строк, чтобы объединить их все в один список.

Я использую функцию строк, но я думаю, что она «работает» только по одной строке за раз, не так ли? Мне нужна функция, которая проверяет, повторяется ли элемент строки в другой строке. Если бы у меня был список строк, это было бы проще (но у меня есть строка строки, которая выглядит как список строк) С уважением, Спасибо.

26.12.2010

  • Чтобы помочь нам лучше ответить на такие вопросы, всегда указывайте хотя бы сообщение об ошибке. Без результатов невероятно расплывчато, и, судя по вашему описанию, проблема может быть практически любой. 26.12.2010
  • Можете ли вы предоставить образец ввода? Мне трудно понять. Вы хотите превратить каждую строку файла в список строк, чтобы в итоге получилось [[String]]? 28.12.2010
  • У меня есть файл с результатами множества записей (участников) в будущую встречу. Этот файл имеет структуру CSV (значения, разделенные запятыми). После парсинга содержимое файла становится примерно таким: [name1,[email protected],phone1,age1,company1] [name2,[email protected],phone2,age2,company2] [name1,email1@mail. com,phone1,age1,company1] [name3,[email protected],phone3,age3,company3] Теперь мне нужно обработать ввод данных, и лучше всего будет что-то вроде: 28.12.2010
  • [[имя1,электронная почта[email protected],телефон1,возраст1,компания1],[имя2,электронная почта[email protected],телефон2,возраст2,компания2],[имя1,электронная почта[email protected],телефон1,возраст1,компания1],[ name3,[email protected],phone3,age3,company3]] что-то вроде :: [[String]]. Но то, что у меня есть выше, это :: String, разделенный на несколько строк. Эту строку можно разделить на строки — функция строк — но каждая строка [namex,[email protected],phonex,agex,companyx] является строкой. Мне нужно преобразовать строку в список строк ::[String] и всего содержимого файла ::[[String]]. 28.12.2010
  • Если я использую функцию read (read line::[String]) для каждой строки, я получаю ошибку из-за отсутствия \ Например: - Чтобы проверить, есть ли повторяющиеся записи, чтобы убедиться, что адрес электронной почты дублируется в другой строке. - посмотреть, сколько участников также принадлежит той или иной компании. Спасибо 28.12.2010

Ответы:


1

Я пробовал с функцией чтения, но безрезультатно

Только что проверил, работает нормально:

Prelude> read "[\"aaa\",\"bbb\",\"ccc\"]" :: [String]
["aaa","bbb","ccc"]

Обратите внимание, что вам нужно указать тип возвращаемого значения явно, так как его нельзя определить по типу аргумента.

26.12.2010
  • Спасибо, это работает отлично; но мне нужно получить содержимое файла, и в нем нет «\» (косая черта); как я могу читать (преобразовывать) из строки? Я имею в виду, что все содержимое файла обрабатывается как строка, разделенная строками (в каждой строке у нас есть что-то похожее на список строк, но являющееся строкой). 26.12.2010

  • 2

    Я думаю, что функция, которую вы ищете, - это lines из Data.List (реэкспортированная Prelude), которая разбивает многострочную строку на список строк.

    26.12.2010
  • Спасибо, Кактус, я использую функцию строк, но я думаю, что она «работает» только по одной строке за раз, не так ли? Мне нужна функция, которая проверяет, повторяется ли элемент строки в другой строке. Если бы у меня был список строк, это было бы проще (но у меня есть строка строки, которая выглядит как список строк) С уважением 28.12.2010

  • 3

    в моем понимании, что вы можете сделать, это

    создайте функцию, которая получает список списков, каждый список представляет собой строку всей строки, переданного аргумента, и проверяет, встречается ли элемент строки в другой строке.

    затем эта функция передает всю строку, разделенную строками, используя [lines][1].

    28.12.2010
  • Спасибо, но как я могу проверить, находится ли элемент в другой строке; потому что я могу обрабатывать только одну строку за раз? Пример: \n первый ввод = удаление строк из каждой строки \n, где все строки = ввод строк; \n eachLine = map listStr allLines \n Другое дело, что если я создаю функцию, которая получает список списка (строк), но я могу передать только строку (каждую строку) (обратите внимание, что в приведенном выше коде \n для разрыва линии) 29.12.2010
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..