Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Скопировать содержимое одного файла в другой, но что бы строки были отсортированы по длине / 7 сообщений из 7, страница 1 из 1
04.09.2013, 16:52:52
    #38386985
sirj77
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скопировать содержимое одного файла в другой, но что бы строки были отсортированы по длине
Есть такая задачка:
есть файл A.txt, в котором есть разные строки; нужно скопировать содержимое файла A.txt в файл B.txt, но что бы скопированные строки были в отсортированном порядке по длине.
Сделал, только вот сортировку не знаю как сделать.

Плюс к заданию: добавить возможность указывать исходный файл, целевой файл и направление сортировки (восходящая или спадающая) в командной строке, например так:
java SortFile aa.txt bb.txt asc
, где SortFile — класс, который мы запускаем, aa.txt — исходный файл, bb.txt — целевой файл, asc или desc — направление сортировки.

Спасибо за помощь!
Если нужен листинг, могу выслать.
...
Рейтинг: 0 / 0
04.09.2013, 17:02:19
    #38386999
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скопировать содержимое одного файла в другой, но что бы строки были отсортированы по длине
А проблема-то какая? Считаем длины строк. Сортируем. Копируем строки в порядке полученом после сортировки. Такой сложный алгоритм? Или какие-то ещё условия есть? Например большой объем файла.
...
Рейтинг: 0 / 0
04.09.2013, 17:12:31
    #38387016
sirj77
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скопировать содержимое одного файла в другой, но что бы строки были отсортированы по длине
Да нет, совсем простая задача, но я только начинаю :)
На словах то понятно..

Примерно можешь написать на джава как это реализовать в моем коде?

Код: 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.
public static void main (String[] args) {
		
		File fi = new File("aa.txt");
		if (fi.exists()) {
			//fi.delete();
			System.out.println("File aa.txt exists");
		}
		if (!fi.exists()) {
			try {
				fi.createNewFile();
				System.out.println("File aa.txt has been created");
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		File fo = new File("bb.txt");
		if (fo.exists()) {
			fo.delete();
			System.out.println("File bb.txt has been deleted");
		}
		if (!fo.exists()) {
			try {
				fo.createNewFile();
				System.out.println("File bb.txt has been created");
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		InputStream is = null;
		OutputStream os = null;
		
		try {
			is = new FileInputStream(fi);
			os = new FileOutputStream(fo);
			
			int b;
			while ((b = is.read()) != -1) {
			os.write(b);
			}
			
			System.out.println("The content of the file aa.txt is copied to the file bb.txt");
			
			/*int b = is.read();
			while (b != -1) {
				os.write(b);
				b = is.read();
			}*/
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (is != null) {
				try {
					is.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if (os != null) {
				try {
					os.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}

...
Рейтинг: 0 / 0
04.09.2013, 17:14:54
    #38387019
DEVcoach
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скопировать содержимое одного файла в другой, но что бы строки были отсортированы по длине
Да, задачка может быть интересной в плане нахождения оптимального решения под какие-то конкретные условия. Например, вот два крайних варианта:
1) Пройтись по всему файлу N раз, где N - количество строк, на каждом чтении выбирая следующую по длине. Памяти минимум надо, на работать будет очень долго.
2) Чистый in-memory: вычитать все в память за раз, потом отсортировать. Очень быстро, но загадит память.

Ну а дальше можно выдумавать все, что угодно. Например, пройтись по файлу, подсчитать и запомнить длины строк. Потом отсортировать только длины, запомнив их изначальный позиции, а потом пройтись несколько раз по файлу, но выбирая не по одной строке, а по несколько, укладывающихся в последовательность.
Короче говоря, тут надо фантазию подключать и помнить про алгоритмическую сложность и потребление памяти.
...
Рейтинг: 0 / 0
04.09.2013, 17:15:36
    #38387021
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скопировать содержимое одного файла в другой, но что бы строки были отсортированы по длине
Читаем:
https://www.google.com/search?q=Java file to string array
Сортируем:
https://www.google.com/search?q=Java sort array with comparator
Куча готового кода по ссылкам выше.
...
Рейтинг: 0 / 0
04.09.2013, 17:17:40
    #38387025
sirj77
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скопировать содержимое одного файла в другой, но что бы строки были отсортированы по длине
Спасибо! Буду разбираться
...
Рейтинг: 0 / 0
04.09.2013, 17:21:23
    #38387030
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скопировать содержимое одного файла в другой, но что бы строки были отсортированы по длине
DEVcoachКороче говоря, тут надо фантазию подключать и помнить про алгоритмическую сложность и потребление памяти.
Достаточно оптимальным и простым решением будет сканировние файла на перенос строки. Из чего получается список позиций и длин. Затем сортировка позиций по длине. Даже для огромных файлов, структура будет не такой уж и большой, кроме клинических случаев. Затем вычитывать уже отсортированые позиции из структуры и копировать строки, читая из RandomAccessFile.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Скопировать содержимое одного файла в другой, но что бы строки были отсортированы по длине / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]