LDIF to CSV

0 respostas
marcoswp3x

Não achei nada parecido, então fiz esse conversor simples de LDIF para CSV:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;

public class LDIFConversor {

	File lidfFile;
	
	File csvFile;
	
	public LDIFConversor(File ldifFile, File csvFile) 
	{
		this.lidfFile = ldifFile;
		this.csvFile = csvFile;
	}

	public void convert() 
	{
		try 
		{
			ArrayList<String> linesFromLDIF = this.getLines();
			ArrayList<HashMap<String, String>> rows = new ArrayList<HashMap<String, String>>();
			ArrayList<String> colsName = new ArrayList<String>();

			HashMap<String, String> colsValue = null;

			for (int i = 0; i < linesFromLDIF.size(); i++) 
			{
				String line = linesFromLDIF.get(i);
				if (line.contains(":")) 
				{
					String[] lineParts = line.split(":");

					if (lineParts[0].equals("dn")) 
					{
						if (colsValue != null)
							rows.add(colsValue);
						colsValue = new HashMap<String, String>();
					}

					if (!colsName.contains(lineParts[0]))
					{
						colsName.add(lineParts[0]);
					}

					if (lineParts.length > 1 && colsValue != null) 
					{
						if (colsValue.containsKey(lineParts[0]))
						{
							colsValue.put(lineParts[0], colsValue.get(lineParts[0])
									+ lineParts[1]);
						}
						else
						{
							colsValue.put(lineParts[0], lineParts[1]);
						}
					}
				}
				if (i == linesFromLDIF.size() - 1)
					rows.add(colsValue);
			}

			ArrayList<ArrayList<String>> values = new ArrayList<ArrayList<String>>();

			FileWriter fileWriter = new FileWriter(csvFile);
			BufferedWriter bufWriter = new BufferedWriter(fileWriter);

			bufWriter.write(join(colsName, ";") + "\n");
			for (HashMap row : rows) 
			{
				ArrayList<String> cel = new ArrayList<String>();
				for (String colName : colsName) 
				{
					if (!row.containsKey(colName))
						cel.add("");
					else
						cel.add(row.get(colName).toString());
				}
				bufWriter.write(join(cel, ";") + "\n");
				System.out.println();
				values.add(cel);
			}

			bufWriter.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static String join(Collection s, String delimiter) {
		StringBuffer buffer = new StringBuffer();
		Iterator iter = s.iterator();
		while (iter.hasNext()) {
			buffer.append(iter.next());
			if (iter.hasNext()) {
				buffer.append(delimiter);
			}
		}
		return buffer.toString();
	}

	public ArrayList<String> getLines() {
		ArrayList<String> lines = new ArrayList<String>();
		try 
		{
			FileReader file = new FileReader(this.lidfFile);
			BufferedReader bufReader = new BufferedReader(file);

			String line;
			while ((line = bufReader.readLine()) != null) {
				lines.add(line);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return lines;
	}
	
	public static void main(String[] x) {
		LDIFConversor ldifConversor = new LDIFConversor(new File("c:/1.ldif"), new File("c:/convertedFile.csv"));
		ldifConversor.convert();
	}
}
Criado 24 de agosto de 2007
Respostas 0
Participantes 1