3f-lab: Маленький практикум по массивам

Столкнулся на днях вот с какой задачкой. Есть небольшая реляционная таблица (около сотни записей), в которой содержатся данные о пользователях. Она состоит из строк вида:


 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, я опишу в другой раз. А пока даже хорошо, что он вынесен за скобки: можно сосредоточиться на анализе остальной части кода.
  • +4
  • 24 февраля 2010, 19:33
  • yababay

Комментарии (5)

RSS свернуть / развернуть
+
0
Ну что… Красиво !
Боюсь при кажущейся простоте — этот «Йгурт» мне не переварить.
avatar

Markony

  • 25 февраля 2010, 07:42
+
0
«Йогурт» — блин буквы теряются...
avatar

Markony

  • 25 февраля 2010, 07:44
+
0
А где определялись:
String ldif =
String users =
String[] saa =
StringBuffer sb =
String[] sa =
String ldf =
avatar

Markony

  • 25 февраля 2010, 07:49
+
0
Прям по ходу дела и определялись. Это же Java Можно объявить переменную и сразу присвоить ей значение в любом месте программы. Причем если переменная определена внутри метода, то по окончании его работы она автоматически будет уничтожена и освободит память.

Код откомпилирован и работает, так что это не просто теоретическая задачка. Вчера я этой программой действительно перекинул данные из PostgreSQL в OpenDS.
avatar

yababay

  • 25 февраля 2010, 08:05
+
0
Bay!
avatar

Markony

  • 25 февраля 2010, 08:36

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.