Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
 Аватар для fors-dnet
3 / 3 / 0
Регистрация: 11.12.2011
Сообщений: 88

Не получается слить временные отсортированные файлы в один отсортированный (внешняя сортировка)

26.10.2012, 02:45. Показов 1135. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Собственно разбил, отсортировал, записал временные файлы, а вместе их слить не получается. Надеюсь на чью-то помощь:
Java
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
import java.io.*;
import java.util.*;
 
public class MyExternalSort {
 
static long F = 10485760;
static long P = 1048576;
 
public static void main (String [] args) throws Exception {
System.out.println ("Please input the path to file: ");
BufferedReader p = new BufferedReader (new InputStreamReader (System.in));
String a = p.readLine ();
int s = (int) Math.ceil((double) F/P);
int i, j;
FileReader f = new FileReader (a);
BufferedReader b = new BufferedReader (f);
for(i=0; i<s; i++) {
TreeSet <String> tSet = new TreeSet <String> ();
for (j = 0; j < ((P < F ? P : F)/12); j++) {
String str = b.readLine();
if (str != null) {
tSet.add(str);
} else {
break;
}
}
String[] buf = new String [1048576];
tSet.toArray(buf);
tSet.clear ();
FileWriter w = new FileWriter ("D:\\ext"+i+".txt");
PrintWriter pw = new PrintWriter(w);
for (int k = 0; k < j; k++) {
if (buf [k] != null){
pw.println(buf[k]);
} else {
break;
}
}
pw.close();
w.close();
}
f.close ();
b.close ();
 
}
 
}
Если это имеет значение, то файл который нужно отсортировать является .txt и имеет такие строки в себе (рандом):
2069154
5828308
4615369
4224833
5286181
9431131
3893207
9730743
5525462
5893284
3791353
6782616
3381298
352834
4595846
3649499
5270483
904450
5541756
4699120
8618523
6717646
1781735
8467600
9527228
9069525
8535827
3769572
8107125
9081411
1087382
5689822
8074092
9630371
862203
3385465
1438164
7900772
7212811
Пробывал теми методами что тут уже предлагали в подобных темах, - у меня почему-то в финальный файл записавыет целиком отсортированный первый файл (только первый!) и далее печатает последнюю строку первого временного файла((

Добавлено через 21 час 36 минут
Java
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
import java.io.*;
import java.util.*;
 
public class MyExternalSort {
 
static long F = 10485760;
static long P = 1048576;
 
public static void main (String [] args) throws Exception {
System.out.println ("Please input the path to file: ");
BufferedReader p = new BufferedReader (new InputStreamReader (System.in));
String a = p.readLine ();
int s = (int) Math.ceil((double) F/P);
int i, j;
FileReader f = new FileReader (a);
BufferedReader b = new BufferedReader (f);
for(i=0; i<s; i++) {
TreeSet <String> tSet = new TreeSet <String> ();
for (j = 0; j < ((P < F ? P : F)/12); j++) {
String str = b.readLine();
if (str != null) {
tSet.add(str);
} else {
break;
}
}
String[] buf = new String [1048576];
tSet.toArray(buf);
tSet.clear ();
FileWriter w = new FileWriter ("D:\\ext"+i+".txt");
PrintWriter pw = new PrintWriter(w);
for (int k = 0; k < j; k++) {
if (buf [k] != null){
pw.println(buf[k]);
} else {
break;
}
}
pw.close();
w.close();
}
f.close ();
b.close ();
 
String[] topNums = new String[s];
            BufferedReader[] brs = new BufferedReader[s];
 
            for (i = 0; i < s; i++) {
                brs[i] = new BufferedReader(new FileReader("D:\\ext"+i+".txt"));
                String t = brs[i].readLine();
                if (t != null) {
                    topNums[i] = t;
                } else {
                    continue;
                }
            }
 
            FileWriter fw = new FileWriter("D:\\FinalSortFile.txt");
            PrintWriter pw = new PrintWriter(fw);
 
            for (i = 0; i < F/12; i++) {
                String min = topNums[0];
                int minFile = 0;
 
                for (j = 0; j < s; j++) {
                    if ((min.compareTo(topNums[j])) < 0) {
                        min = topNums[j];
                        minFile = j;
                    }
                }
 
                pw.println(min);
                String t = brs[minFile].readLine();
                if (t != null) {
                    topNums[minFile] = t;
                } else {
                    continue;
                }
 
            }
            for (i = 0; i < s; i++) {
                brs[i].close();
            }
 
            pw.close();
            fw.close();
 
}
 
}
код который судя по отзывам должен работать, но у меня в итоговом файле записывает первый из отсортированных кусков, а оставшееся место заполняет последним элементом этого самого первого отсортированного куска.
Буду очень благодарен если кто-то поможет
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.10.2012, 02:45
Ответы с готовыми решениями:

Слить файлы в один
Добрый вечер. Нужно слить файлы в один: В качестве параметров принимать имена файлов и слить все эти файлы в файл имя которого...

Как найти все .txt файлы и слить их содержимое в один файл?
Нужно найти и слить содержимое всех txt файлов в один txt файл. Ищу файлы так: find -name &quot;*.txt&quot; но действие...

Слить два массива в третий отсортированный по убыванию, без дублей
Даны два массива. Массив А состоит из N элементов и отсортирован по возрастанию. Массив B состоит из M элементов и отсортирован по...

1
636 / 528 / 165
Регистрация: 01.04.2010
Сообщений: 1,843
26.10.2012, 09:43
Все временные файлы читаешь в один список, сортируешь его, пишешь полученный после сортировки список в файл.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.10.2012, 09:43
Помогаю со студенческими работами здесь

"Слить" вместе отсортированные массивы A и B
Помогите пожалуйста, туплю. Есть два отсортированных в порядке неубывания массива A и B. Получить отсортированный по неубыванию массив...

Слить один два файла в один
Подскажите как слить 1 и 2 файл в 3 файл

не получается слить разделы
Помогите! разбил штатной программой жёсткий и под системный выделил 45 гигов! естественно по запаре ;) теперь разумеется нехватка места....

Слить 6 видео в один
У меня есть 6 видосов, и в каждом видосе есть какие секунд 30-35 отрывка, который мне больше всего нравится. Как можно через сони вегас...

временные файлы
скажите все временные файлы хранятся только в папке TEMP,и торренты которые подкадываю при скачке тоже?


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru