algunas tienen 2 caracteres y otras 3, yo las organicé como rangos, para evitar crear más entradas, por esta razón se repiten algunas. En fin se las entiende como un rango (Inicio y Fin).
El tercer valor es el nombre de la codificación que se le asigna
El cuarto es el origen (la mayoría de los casos es un pais
Este es el programita que utilicé para procesar el archivo de texto:
unit Principal; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Grids, Vcl.DBGrids, Vcl.ExtCtrls, Data.DB, Datasnap.DBClient, Vcl.StdCtrls; type TfrmPrincipal = class(TForm) dsEan: TDataSource; cdsEan: TClientDataSet; panGrid: TPanel; dbgEan: TDBGrid; btProcesar: TButton; cdsEancfIni: TIntegerField; cdsEancfFin: TIntegerField; cdsEancfNomCodif: TStringField; cdsEancfOrigen: TStringField; procedure btProcesarClick(Sender: TObject); end; var frmPrincipal: TfrmPrincipal; implementation {$R *.dfm} procedure TfrmPrincipal.btProcesarClick(Sender: TObject); var F: TextFile; L: String; AP: array[1..4] of String; I,J: Integer; begin AssignFile(F, 'eancodes.txt'); // Asigna el archivo que se debe encontrar en la ruta del EXE Reset(F); // Abre el archivo para lectura únicamente cdsEan.DisableControls; // Evita la actualización por cada inserción deshabilitando los controles ligados al dataset. while not Eof(F) do // Mientras que existan líneas en el archivo de texto o sea no sea el fin del archivo begin readln(F, L); // Lee una línea del archivo de texto teniendo en cuenta el CR (Carriage Return, Regreso de carril) J:= 1; Fillchar(AP, SizeOf(AP), ''); // en vez de: for I := 1 to 4 do AP[I]:= ''; for I := 1 to Length(L) do // Desde el primer elemento de la línea, separa a los elementos usando las comas if L[I]<>',' then AP[J]:= AP[J] + L[I] else Inc(J); cdsEan.Insert; // Agrega una fila a la tabla con los campos según su orden, de uno a cuatro usando el arreglo cdsEan.FieldByName('cfIni').AsInteger:= StrToInt(AP[1]); if AP[2]<>'' then cdsEan.FieldByName('cfFin').AsInteger:= StrToInt(AP[2]) else cdsEan.FieldByName('cfFin').AsInteger:= StrToInt(AP[1]); cdsEan.FieldByName('cfNomCodif').AsString:= AP[3]; cdsEan.FieldByName('cfOrigen').AsString:= AP[4]; cdsEan.Post; end; cdsEan.EnableControls; // Habilita los controles ligados al dataset para permitir ver el resultado CloseFile(F); cdsEan.SaveToFile('eancodes.cds', dfBinary); // Escribe en formato binario cdsEan.SaveToFile('eancodes.xml', dfXML); // Escribe en formato XML end; end.
El CustomDataSet tiene esta definición de campos:
cfIni: Integer
cfFin: Integer
cfNomCodif: String
cfOrigen: String
No hay control de errores, etc. El archivo de texto debe estar en el directorio del ejecutable.
Espero que a alguien le sirva. Yo las pienso usar para suministrar información extra a los artículos.

Hay un error en Nederland, debería ser Paises Bajos (olvidé traducir).

Saludos


