Category: it

Category was added automatically. Read all entries about "it".

Как объединить несколько файлов в один



Скачал недавно с дюжину рассказиков для чтения на покете. Но вот беда - каждый рассказ - отдельный файл, а для удобства чтения хочется объединить их в один. К тому же файлы оказались в кодировке UTF8, а для покета требуется виндовая кодировка Cp1251. Вероятно, задачу можно было решить каким-нибудь скриптом (особенно в юниксе) или вообще вручную, но мы не ищем легких путей. Во-первых, я переименовал файлы так, чтобы их название начиналось с цифры. Т.е. получил список файлов вроде 01_story_one.txt, 02_story_two.txt и так далее. А во-вторых, написал для обработки следующую программу на джаве.
Collapse )
Код необходимо сохранить в файле Converter.java (регистр имеет значение!) и откомпилировать его командой
javac Converter.java
. Запуск осуществляется командой
java Converter
. На выходе получаем то, что было надо - один файл (output.txt), содержащий все нужные рассказы.

Java. Точность вычислений.



Довольно часто при написании программ приходится выполнять операции над числами с плавающей точкой. Это и обыкновенные бухгалтерские программы, и сложные математические расчеты. Для преставления таких чисел в java служат два примитивных типа данных - float и double, а также их классы-обертки Float и Double соответственно. Для выполнения точных вычислений предназначен класс java.math.BigDecimal, и далее будет показано, что именно его нужно использовать для точных вычислений.

Рассмотрим хрестоматийный пример: сколько будет 2 / 3? Очевидно, периодическая дробь - 0,(6). В различных расчетах она обычно округляется до необходимой точности, например, в случае точности до третьего знака можно записать: 2 / 3 = 0,667. В случае точности до двадцатого знака: 2 / 3 = 0,66666666666666666667. Посмотрим теперь, какой ответ нам выдаст программа, написанная на java, будем рассматривать случаи использования различных типов данных, последовательно float, double и BigDecimal. Интересующая нас точность - до двадцатого знака.
Collapse )

Java. Локализация



Кто о чем, а я опять о джаве. На этот раз речь пойдет о локализации. Под локализацией подразумевается отображение данных (прежде всего пользовательского интерфейса) на языке пользователя. Наиболее ярким примером различия представления данных, по-моему, является отображение даты - в России принят формат День, Месяц, Год, а в США - Месяц, День, Год. Грамотно написанная программа должна эти различия учитывать.

Основным классом, отвечающим за разное представление данных в разных странах, является в java класс java.util.Locale. Существует целый набор стандартных локалей, идентифицируются они в основном по двум параметрам - языку и стране, иногда может добавляться платформа - Windows или Unix. Все доступные локали можно посмотреть следующей программкой.

import java.util.Locale;

public class ListLocales
{
	public static void main(String [] arg)
	{
		Locale [] lst = Locale.getAvailableLocales();

		for(Locale l: lst)
			System.out.println(l);
	}
}

Collapse )

Мои java-приложения



Из всех средств разработки, с которыми я когда-либо имел дело, java произвела наиболее благоприятное впечатление. Во-первых, конечно, кроссплатформенность. Java-программа заработает везде, где есть java-машина, а последние есть практически везде. После знакомства с Windows Vista возникло стойкое желание послать Microsoft с его поделками подальше, и пользоваться свободным программным обеспечением. Но вот беда, программы, написанные под Windows под линуксом часто не работают, для java программы же система не имеет никакого значения. И java, к тому же, сама бесплатная.

Java бесплатна, в отличие от подавляющего большинства средств разработки под Windows. Конечно, при наличии бесплатного компилятора программу можно писать в любом текстовом редакторе. А для джавы есть бесплатное и очень удобное средство разработки - Eclipse. Кстати, есть варианты как под линукс, так и под Windows.

На данный момент обнаружил в джаве наименьшее число глюков, связанных собственно с языком. Например, хваленый Dot.net до последней версии содержал очень неприятную ошибку, связанную с наследованием форм. Если на форме-предке были некоторые элементы управления, а размеры формы-потомка менялись, то при запуске формы-потомка унаследованные элементы управления уезжали вправо-вниз за границы экрана. В других средах разработки глюки, связанные с реализацией, обязательно рано или поздно обнаруживалось. Java - (пока?) приятное исключение.

Учитывая все вышесказанное предпочитаю сейчас все, что можно, писать на джаве. Тем более, что современные версии содержат все привычные инструменты, такие как графический интерфейс, работа с файлами и базами данных. В качестве тренировки было написано множество программок, упоминания же заслуживают те, что когда-либо использовались кем-то, кроме меня.

1. Программа для учета строительных отходов. При строительстве современного здания возникает огромное количество разнообразных отходов, от земли, вынутой из котлована, до бытового мусора, который неизбежно оставляют строители. Для учета всех этих отходов создаются специальные документы, как общего плана, так и ежеквартальные. Отходы необходимо утилизировать, делается это, разумеется, не бесплатно. Существует 5 классов отходов, чем меньше номер - тем отход опаснее, и тем дороже стоит утилизация. Плюс часто требуются точные данные по уже утилизированным отходам, или наоборот - по остаткам, или еще что-то, с отходами связанное. Для упрощения этих действий и была создана программа. Клиент-серверное приложение, данные хранит в СУБД MySQL, позволяет хранить и отображать как официальные, так и реальные объемы отходов. Данные выводит в xml-файлы, данные из которых отображаются в специально сформированных экселевских таблицах.

2. Программа вычисления среднего ветра. Имеются файлы спутниковых данных о ветре по всему земному шару за несколько лет. На год приходится 12 файлов - по одному на месяц. Измерения проводятся следующим образом. Земля покрыта сеткой с точностью до полуградуса. С юга на север приходится 363 точки, с востока на запад - 752. В каждой точке ветер измеряется 4 раза в день - в 0, 6, 12 и 18 часов. Широтная и долготная компоненты ветра вместе со временем измерения записываются в файл. В результате данные за месяц занимают порядка 250 мегабайт. Требуется: в указанной прямоугольной области земли посчитать средний ветер за весь период наблюдений. Теоретически задача несложная, но технические трудности имеются. Пришлось вспомнить молодость - как работать с файлами большого объема, занимая при этом не слишком много компьютерных ресурсов. Заодно вспомнил, как работать с байтовыми потоками. Обнаружилась следующая особенность джавы. Все данные записываются в виде 4-хбайтного числа с плавающей точкой. Байты можно пронумеровать с 1-го по 4-й. Так вот, джава записывает данные именно в таком порядке - сначала 1-й байт, потом 2-й и так далее до 4-го. А остальные языки программирования - в обратном. Сначала 4-й, потом 3-й и так далее до 1-го.

3. Программа пакетной генерации html-файлов из xml+xsl. Моему другу yaguanodont потребовалось получить html файл из имеющихся xml с таблицами стилей xsl. Проблема оказалась в том, что все программы, что он смог найти, преобразовывали только один файл за раз, а это неудобно. По его просьбе и была написана программа. Графический интерфейс присутствует. На входе указываются один или несколько xml файлов (причем список можно загрузить из файла) и один xsl файл. На выходе получаем один или несколько html файлов, разумеется, если не обнаружено ошибок. В процессе работы несколько укрепил свои знания xml, поскольку в процессе использования возникли требовавшие решения проблемы с кодировкой. В результате получилось вполне рабочее приложение.

Чем дальше, тем больше java нравится, в дальнейшем постараюсь пользоваться только ею.