I need convert this string in Char List

I'm learning haskell. I'm reading a string from a text file and need to make this string becomes a list of char.

The input file is this:

Individuo A; TACGATCAAAGCT 
Individuo B; AATCGCAT 
Individuo C; TAAATCCGATCAAAGAGAGGACTTA 

I need convert this string

S1 = "AAACCGGTTAAACCCGGGG"  in  S1 = 
["A","A","A","C","C","G","G","T","T","A","A","A","C","C","C","G","G","G","G"] 
or S1 = 
['A','A','A','C','C','G','G','T','T','A','A','A','C','C','C','G','G','G','G'] 

but they are separated by ";"

What should I do?

What can I do?

after getting two lists, I send them to this code:

lcsList :: Eq a => [a] -> [a] -> [a]
lcsList [] _ = []
lcsList _ [] = []
lcsList (x:xs) (y:ys) = if x == y
                          then x : lcsList xs ys
                          else
                            let lcs1 = lcsList (x:xs) ys
                                lcs2 = lcsList xs (y:ys)
                            in if (length lcs1) > (length lcs2)
                                  then lcs1
                                  else lcs2

Upvotes: 2

Views: 9448

Answers (2)

Abizern
Abizern

Reputation: 150615

A rough and ready way to split out each of those strings is with something like this - which you can try in ghci

let a = "Individuo A; TACGATCAAAGCT"
tail $ dropWhile (/= ' ') $ dropWhile (/= ';') a

which gives you:

"TACGATCAAAGCT"

And since a String is just a list of Char, this is the same as:

['T', 'A', 'C', 'G', ...

Upvotes: 4

Emily
Emily

Reputation: 2684

If your file consists of several lines, it is quite simple: you just need to skip everything until you find “;”. If your file consists of just one line, you’ll have to look for sequences’ beginnings and endings separately (hint: sequence ends with space). Write a recursive function to do the task, and use functions takeWhile, dropWhile.

A String is already a list of Char (it is even defined like this: type String = [Char]), so you don’t have to do anything else. If you need a list of Strings, where every String consists of just one char, then use map to wrap every char (once again, every String is a list, so you are allowed to use map on these). To wrap a char, there are three alternatives:

  1. Use lambda function: map (\c -> [c]) s
  2. Use operator section: map (:[]) s
  3. Define a new function: wrap x = [x]

Good luck!

Upvotes: 3

Related Questions