Итак, если я правильно прочитал ваш код, ваш ввод будет выглядеть примерно так:
[...]
Foo
https://example1.com
https://example2.com
Bar
https://example3.com
Baz
Xyzzy
https://example4.com
[...]
Отсюда вы хотите, чтобы заголовки были сгруппированы с URL-адресами под ними.Вот программа на Haskell, которая делает это:
import Data.List (isPrefixOf)
groupUrls :: [String] -> [(String, [String])]
groupUrls [] = []
groupUrls (header:others) = (header, urls) : groupUrls remaining
where (urls, remaining) = span (isPrefixOf "https") others
main = do
input <- readFile "\\\\ad1\\\\Users\\aanodide\\Desktop\\APIUserGuide.txt"
let slice = take (471 - 375 + 1) $ drop 374 $ lines input
let kvp = groupUrls slice
print kvp
Вывод:
[("Foo",["https://example1.com","https://example2.com"]),("Bar", ["https://example3.com"]),("Baz",[]),("Xyzzy",["https://example4.com"])]
Ключевая интересующая функция здесь span
, которая используется здесь длявзять последовательные строки, начинающиеся с "https"
, и вернуть их вместе с оставшимися строками, которые затем обрабатываются рекурсивно.