С Новым годом! Форум программистов, компьютерный форум, киберфорум
F# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
9 / 9 / 6
Регистрация: 13.11.2012
Сообщений: 173

Символьную строку в кортеж

22.12.2013, 23:44. Показов 1283. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Возникла потребность в образовательных целях сделать БД с использованием F#. Самый простой вариант, в моем случае, с использованием txt файла.
Пусть БД содержит имя, фамилию и год р.
F#
1
2
type Group = { Name: string; Surname: string; BirthDate: string }
let mutable DataBase:Group list = [];
Пусть имеется файл txt, который я считываю и получаю внутреннее представление БД. Пытался сделать своими силами, пока не получилось. В связи со нехваткой времени, прошу помочь
F#
1
2
3
4
5
6
7
8
9
10
11
12
    let ReadDB() =
        use sr = new StreamReader("../../FSharpDB.txt")
        let db = sr.ReadToEnd()
        let source = db.Split([|' '|], StringSplitOptions.RemoveEmptyEntries) |> Array.toList
        let rec ConvertToGroup (listIn: string list) (grOut: Group list)=
// как я себе это представлял, всё неправильно
            match listIn with
            | [name, surname, birth] :: tail -> 
                grOut :: { Name = name; Surname = surname; BirthDate = birth }
                ConvertToGroup tail grOut
            | _ -> []
        ConvertToGroup source DataBase
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.12.2013, 23:44
Ответы с готовыми решениями:

Создать кортеж и распаковать кортеж в несколько переменных
Создать кортеж и распаковать кортеж в несколько переменных

Как ввести символьную строку и переписать в новую строку без пробелов?
Как ввести символьную строку и переписать в новую строку без пробелов?Пожалуйста помогите! Формат ввода данных: Введите строку а роза...

Ввести символьную строку и переписать в новую строку без пробелов
ВВЕСТИ СИМВОЛЬНУЮ СТРОКУ И ПЕРЕПИСАТЬ В НОВУЮ СТРОКУ БЕЗ ПРОБЕЛОВ

3
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
23.12.2013, 18:34
как то так (если файл не сильно большой)

F#
1
2
3
4
5
6
7
8
9
10
    let ReadDB() =
        let db = System.IO.File.ReadAllLines("../../FSharpDB.txt") |> Array.toList
        let rec loop (xs : string list) acc = 
            match xs with
            | line :: t -> 
                match line.Split([|' '|], System.StringSplitOptions.RemoveEmptyEntries) with
                | [|name; surname; birth|] -> loop t ({ Name = name; Surname = surname; BirthDate = birth } :: acc)
                | _ -> loop t acc
            | [] -> acc
        loop db []
1
9 / 9 / 6
Регистрация: 13.11.2012
Сообщений: 173
24.12.2013, 00:11  [ТС]
Спасибо! Как всегда очень оперативно) Радует лаконичность F# (красота!), жаль что самому въехать пока не получается.
Проморгал (не нашел) метод File.ReadAllLines, а действительно хотелось читать по строчкам. Перепутал ассоциативность оператора :: . Так же не знал, что надо
F#
1
[|name; surname; birth|]
а не
F#
1
[name; surname; birth]
Добавлено через 3 часа 53 минуты
Моя программа (ее часть). Решил БД преставить с помощью класса. Почему не работает метод InsertData?

F#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
type Group = { Name: string; Surname: string; BirthDate: string }
 
//Класс для работы с БД
type DB_Engine(DB_path:string) =
 
    // считывание БД во внтреннее представление
    let ReadDB() =
        try
            let db = File.ReadAllLines("../../FSharpDB.txt") |> Array.toList
 
            let rec loop (xs : string list) acc =
                match xs with
                | line :: tail ->
                    match line.Split([|' '|], StringSplitOptions.RemoveEmptyEntries) with 
                    | [|name; surname; birth|] -> loop tail ({ Name = name; Surname = surname; BirthDate = birth} :: acc)
                    | _ -> loop tail acc
                | [] -> acc
            loop db []
        with 
            :? IO.FileNotFoundException -> []
        
    // внутреннее представление БД
    let mutable DataBase = ReadDB()  
 
    // Добавление записи в БД
    member __.InsertData (data:string) =
        match data.Split([|' '|], StringSplitOptions.RemoveEmptyEntries) with
        | [|name; surname; birth|] -> { Name = name; Surname = surname; BirthDate = birth} :: DataBase
        | _ -> failwith "Неверные данные" 
 
[<EntryPoint>]
let main argv = 
    let mutable path = "../../FSharpDB.txt"
    let db = DB_Engine(path)
 
    db.InsertData("Вася Пупкин 2000") // Данное выражение должно иметь тип "unit", а имеет тип "Group list". Используйте "ignore", чтобы отменить результат выражения, или же "let", чтобы привязать результат к имени
 
    Console.ReadKey()
    0 // возвращение целочисленного кода выхода
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
24.12.2013, 07:48
потому как возвращается Group list, а надо его сохранаять а не возвращать
F#
1
2
3
4
member __.InsertData (data:string) =
        match data.Split([|' '|], StringSplitOptions.RemoveEmptyEntries) with
        | [|name; surname; birth|] -> DataBase <- { Name = name; Surname = surname; BirthDate = birth} :: DataBase
        | _ -> failwith "Неверные данные"
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.12.2013, 07:48
Помогаю со студенческими работами здесь

Преобразовать символьную строку в строку, в которой после каждого символа стоят две звездочки
Надо составить программу на VBA которая бы 1. Преобразовывала символьную строку в строку, в которой после каждого сим-вола стоят две...

Как используя командную строку ввести символьную строку?
Как используя командную строку ввести символьную строку?

Считывает символьную строку с экрана, выводит в файл (.txt) данную строку, перевернув её(было 123, стало 321)
Наткнулся на задачу, помогите решить: вводиться символьная строка, программа считывает строку и выводит её в файл(текстовой), перевернув...

не соеденяет символьную строку
Добрый день уважаемые товарищи! пишу службу которая будет следить за usb flash и за CD-Rom дабы пользователи не могли ими пользоваться....

Ввести символьную строку.
Помогите решить задачу с объяснениями. Ввести символьную строку. Перед каждым сиимволом &quot;a&quot; вставить символ &quot;!&quot;....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru