Muchos de los que tienen las famosas bases de datos robadas, sobre todo el archivo release1.tar que contiene el archivo ARCHIVO_B_2005.DAT no saben como cargar los datos en una base de datos.
El problema radica en que son muchos campos y estan separados por largo fijo (flat file). Para poder cargarlos hice un script en php que se encarga de ir separandolos y crea un archivo CSV. Una vez generado el archivo, puede cargarse tranquilamente en MySQL.

Paso 1
Convertir el charset del archivo:

felipe@funstation $ iconv -f ISO-8859-1 -t UTF8 -o data.dat ARCHIVO_B_2005.DAT

Paso 2
Convertir el flat file en uno csv.
Bajar este script y ejecutarlo:

felipe@funstation $ mv fix2csv.php_txt fix2csv.php
felipe@funstation $ php -d memory_limit=256M -f fix2csv.php > psu.csv

Paso 3
Crear las tablas donde se almacenaran los registros.
Obviamente para ocuparlas en algo serio tienen que cambiar los campos a los que corresponden. Para no calentarme la cabeza hice otro script en php que saca los mismos datos que el script anterior y genera puros campos tipo ‘varchar’ con el largo especificado.

felipe@funstation $ mv generate_table.php_txt generate_table.php
felipe@funstation $ php -f generate_table.php > table.sql

Archivo generado: table.sql

Paso 4
Los datos se cargan igual que como habia mencionado antes en otro post. Como son muchos campos y nuevamente me da lata escribirlos a mano, hice un último script que genera la linea necesaria para cargar los datos desde el csv:

felipe@funstation $ mv generate_load_csv.php_txt generate_load_csv.php
felipe@funstation $ php -f generate_load_csv.php > load.sql

Archivo generado: load.sql

Paso 5
Ahora con los scripts listos solo queda ejecutarlos:

felipe@funstation $ mysql -u usuario nombre_base_datos < table.sql
felipe@funstation $ mysql -u usuario nombre_base_datos < load.sql

Nota: En mi computador funciona perfecto, pero en el servidor algo pasa con el encoding que no puede leer bien los archivos utf8.