Вы записываете в файл только одну строку текста, и поскольку finlist
не является типом, для которого StreamWriter.WriteLine()
имеет определенную перегрузку, он обрабатывается как object
, а используемая строка являетсярезультат finlist.ToString()
, который, как обычно со встроенными типами .NET, является просто именем типа.
Если вы хотите записать фактические элементы массива в файл, вам нужно на самом делеобработать массив.
Это запишет части строк из всех кортежей в текстовый файл:
finlist
|> Array.map fst
|> Array.iter writer.WriteLine
Чтобы включить числа, например, в формате «текст: 1»,вам нужно было бы сначала создать соответствующим образом отформатированную строку для каждого элемента массива:
finlist
|> Array.map (fun (text, number) -> sprintf "%s: %i" text number)
|> Array.iter writer.WriteLine
Кстати, из-за того, что строки .NET используют \
для экранирования символов, как это делают регулярные выражения, вашRegExes не будет работать так, как вы их написали.Это должно быть
let reg = RegularExpressions.Regex @"\s+"
let cleanEx = RegularExpressions.Regex @"[\,\.\!\""\:\;\?\-]"
Здесь есть два изменения: @
перед строками говорит компилятору не использовать \
для экранирования символов (в качестве альтернативы вы можете записать каждый обратный слеш в RegEx как \\
, но это не делает его более читабельным).В середине второго другого "
экранирует двойные кавычки, потому что в противном случае они теперь заканчивали бы строку, и строка больше не компилировалась бы.