2014-11-07 2 views
0

Я пытаюсь свернуть массив массивов строк в одну строку, но мне не повезло. К сожалению, кажется, Array.reduce ожидает, что моя лямбда вернет массив строк, потому что это массив массивов строк.Складывание массива массивов

Я получаю:

ошибка Строка 37: 'строка []' тип не соответствует тип 'строка'

Это виновный линия

(fold state) + (fold item) 

Потому что ожидается, что лямбда вернется string[]

Вот код:

let splitStr (seperator: string[]) (str: string) = str.Split(seperator, StringSplitOptions.None) 
let convertFile fileName = 
    let arrayToTransaction arr = 
     let rec foldArray index (sb: StringBuilder) (arr:string[]) = 
      if index > 5 then sb.ToString() 
      else 
       let text = 
        match index with 
        | 0 -> sb.Append(DateTime.Parse(arr.[1]).ToString("dd/MM/yy", CultureInfo.InvariantCulture)) 
        | 1 -> sb.Append(arr.[0].Substring(0, arr.[0].IndexOf(',')).Trim()) 
        | 2 -> sb.Append("Test") 
        | 3 -> sb.Append("Test") 
        | 4 -> sb.Append(Single.Parse(arr.[2].Substring(arr.[2].IndexOf('-') + 1)).ToString("F2", CultureInfo.InvariantCulture)) 
        | _ -> sb.Append(String.Empty) 
       foldArray (index + 1) (text.Append(",")) arr 

     arr 
     |> Array.map (splitStr [|"\n"|]) 
     |> Array.reduce (fun state item -> let fold x = foldArray 0 (new StringBuilder()) x 
              (fold state) + (fold item)) 

    File.ReadAllText(fileName) 
    |> splitStr [|"\r\n\r\n"|] 
    |> arrayToTransaction 
+0

Я уверен, что у нас нет 37 строк. Пожалуйста, покажите, какая строка имеет ошибку. –

+0

. Я добавил разъяснение на оскорбительной строке. –

ответ

2

Ваш лямбда в Array.reduce должен возвращать string[], так как подпись лямбда является 'T->'T->'T и первый 'T уже объединены в string[] поэтому результат должен быть также string[]

+0

Да, мне удалось решить эту проблему путем изменения коллекции до ее сокращения с помощью 'Array.map'. –

+0

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

Смежные вопросы