Форум программистов, компьютерный форум, киберфорум
Prolog
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 09.11.2015
Сообщений: 1

Разделение текстового файла на три примерно одинаковой длины по границе строк

02.05.2016, 13:02. Показов 769. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Необходимо разделить текстовый файл на три примерно одинаковой длины по границе строк. Сделал разделение на 2 файла, вот код. Буду благодарен если кто поможет.
Prolog
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
DOMAINS
 
% список элементов типа STRING
list_string = string*
list = integer*
file=myfile
 
PREDICATES
%Создание меню
nondeterm result.
nondeterm menu.
nondeterm process (integer).
 
% Загрузка файла
nondeterm work_file(list_string,string).
 
% Размер файла
nondeterm file_long(list_string,integer).
 
% Создание двух списков из одного
nondeterm make_files(real,integer,list_string,list_string,list_string).
 
% Сохранение данных в файл
nondeterm save_to_file(list_string,string).
 
% Печать списка
nondeterm write_list(list_string).
 
% Чтение списка
nondeterm read_list(list_string).
 
CLAUSES
result:- menu.
% Меню программы
    menu:- nl, write ("**************************************"), nl,
           write ("0. Выход "), nl,
           write ("1. Разделение текстового файла на два примерно одинаковой длины по границе строк. "), nl,
           write ("**************************************"), nl, 
           write ("Введите пункт меню"), nl, readint (X), process(X), !.
%0. Выход 
    process(0).
    
%5. Разделение текстового файла на три примерно одинаковой длины по границе строк.   
    process(1):-
        write(" 1. Разделение файла на два файла примерно одинаковой длины по границе строк."),nl,nl,
        work_file(List1,Namef),
        write(" Введите имя первого файла: "),
        readln(Namef1),
        write(" Введите имя второго файла: "),
        readln(Namef2),
        file_long(List1,Long),
        H_long=Long/2,
        make_files(H_long,_,List1,List2,List3),
        save_to_file(List2,Namef1),
        save_to_file(List3,Namef2),
        write(" Содержимое файла ",Namef," :"),nl,
        write_list(List1),
        write(" Содержимое файла ",Namef1," после обработки данных:"),nl,
        write_list(List2),
        write(" Содержимое файла ",Namef2," после обработки данных:"),nl,
        write_list(List3),
        readchar(_),menu.
        
        
%work_file  
  work_file(List,Namefile):-
    write(" Введите имя файла: "),
    readln(Namefile),
    existfile(Namefile),
    openread(myfile,Namefile),
    readdevice(myfile),
    read_list(List),
    readdevice(keyboard),
    closefile(myfile);
    write(" Указанный файл не существует."),nl,
    work_file(List,Namefile).
    
%file_long
 file_long([],0).
 file_long([H|T],L):-
    file_long(T,L1),
    str_len(H,Len),
    L=L1+Len. 
    
%make_files     
 make_files(_,0,[],[],[]).
 make_files(Hl,Cl,[H|T],[H|T1],T2):-make_files(Hl,Cl1,T,T1,T2),
    str_len(H,Len),
    Cl=Cl1+Len,
    Cl<Hl.
 make_files(Hl,Cl,[H|T],T1,[H|T2]):-make_files(Hl,Cl,T,T1,T2).
 
%save_to_file 
 save_to_file(List,Namefile):-
    openwrite(myfile,Namefile),
    writedevice(myfile),
    write_list(List),nl,
    writedevice(screen),
    closefile(myfile).
 
%write_list 
 write_list([]).
 write_list([H|T]):-
    write(H),nl,
    write_list(T).
 
%read_list  
 read_list([H|T]):-
    readln(H),
    H<>"",
    read_list(T).
 read_list([]).
 
 GOAL
 result.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.05.2016, 13:02
Ответы с готовыми решениями:

Разбить строку на две примерно одинаковой длины по границе слов.
Вот написал задание из лабы, всё работает норм, только сомнения по коду, возможно более грамотно можно реализовать. Подскажите кто знает. ...

Разбить исходный список на два списка примерно одинаковой длины
Разбить исходный список на два списка примерно одинаковой длины. domains list = real* predicates nondeterm...

Разделение текстового файла на части с равным количеством строк
Разделение текстового файла на части с равным количеством строк. Доброго времени суток. Имеется текстовый файл, количество строк в...

1
0 / 0 / 0
Регистрация: 26.11.2014
Сообщений: 28
21.05.2016, 23:35
вопрос, почему программа работает в папке temp, если даже в этой папке то он не видит вводимый файл
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.05.2016, 23:35
Помогаю со студенческими работами здесь

Даны три слова одинаковой длины, вывести их в алфавитном порядке
Добрый день форумчане, кому не сложно помогите решить, буду при много благодарен: Даны три слова одинаковой длины начинающиеся на...

Разработать процедуру сортировки строк заданного текстового файла по убыванию длины строки
Помогите, пожалуйста! Задание должно выполняться с использованием линейных списковых структур. Разработать процедуру сортировки строк...

Из текстового файла, содержащего несколько строк, удалить слова максимальной длины и лишние пробелы
Может кто подскажет как делать, ибо понятие как работать со строками и условиями нету. &quot;Из текстового файла, содержащего...

Форматированный вывод строк одинаковой длины
Добрый день. Понадобилось выводить на консоль массив чисел, чтоб было красиво нужно их сделать одной длины. System.Format работает немного...

Разделение строк на подстроки определённой длины
Можете привести пример кода, разделяющего строки на подстроки определённой длины ? И что бы весь этот процесс происходил не в memo...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru