3f-lab: Маленький практикум по массивам
Столкнулся на днях вот с какой задачкой. Есть небольшая реляционная таблица (около сотни записей), в которой содержатся данные о пользователях. Она состоит из строк вида:
Нужно превратить эту таблицу в ldif-формат для импорта в OpenDS.
Вот как я это сделал…
Во-первых, вывел базу данных в обычный текстовой файл с именем users.sql.
Во-вторых, сформировал ldif-шаблон (файл template.ldif) в со следующим содержимым:
Теперь сам код:
Метод stream2String, превращающий содержимое текстового файла в объект String, я опишу в другой раз. А пока даже хорошо, что он вынесен за скобки: можно сосредоточиться на анализе остальной части кода.
zn006auto | 670b14728ad9902aecba32e22fa4f6bd | [email protected] | Иванов С.А.
gvido | 0f7642f1c746acbf242667b7eda3c006 | [email protected] | gvidon2009
remix | 7fd6b586c2959e9501a8f551df9ff67b | [email protected] | Александр
Нужно превратить эту таблицу в ldif-формат для импорта в OpenDS.
Вот как я это сделал…
Во-первых, вывел базу данных в обычный текстовой файл с именем users.sql.
Во-вторых, сформировал ldif-шаблон (файл template.ldif) в со следующим содержимым:
dn: cn={0},dc=users,dc=somesite,dc=ru
objectClass: person
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: top
givenName:: {3}
uid: {0}
cn: {0}
sn:: {3}
userPassword: {MD5}{1}
mail: {2}
Теперь сам код:
import java.io.FileInputStream;
import java.io.FileWriter;
import com.michaelbelyakov1967.util.StreamPreparator;
public class Main{
public static void main(String[] args){
try{
String ldif = StreamPreparator.stream2String(new FileInputStream("template.ldif"));
String users = StreamPreparator.stream2String(new FileInputStream("users.sql"));
String[] saa = users.split("\n"); // расщепляем строку на массив
// по возврату каретки
StringBuffer sb = new StringBuffer();
for(String s : saa){
String[] sa = s.split("\\|"); // расщепляем строку на массив по знаку '|'
String ldf = new String(ldif);
for(int i = 0; i < sa.length; i++){
if(i > 3){sb.append(ldf + '\n');break;} // присоединяем к буферу результат
// предыдущей итерации
ldf = ldf.replaceAll("\\{" + i + "\\}", sa[i].trim()); // подставляем значение из массива
// вместо конструкции вида {n}
}
}
FileWriter fw = new FileWriter("output.ldif");
fw.write(sb.toString());
fw.flush();
fw.close();
}
catch(Exception ex){}
}
}
Метод stream2String, превращающий содержимое текстового файла в объект String, я опишу в другой раз. А пока даже хорошо, что он вынесен за скобки: можно сосредоточиться на анализе остальной части кода.
Комментарии (5)
RSS свернуть / развернутьБоюсь при кажущейся простоте — этот «Йгурт» мне не переварить.
Markony
Markony
String ldif =
String users =
String[] saa =
StringBuffer sb =
String[] sa =
String ldf =
Markony
Код откомпилирован и работает, так что это не просто теоретическая задачка. Вчера я этой программой действительно перекинул данные из PostgreSQL в OpenDS.
yababay
Markony
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.