EliminaCodigoDeArchivoBin

EliminaCodigoDeArchivoBin es una aplicación de consola que copia las entidades de un archivo .bind a otro archivo y quita a cada copia un código indicado.

Código: EliminaCodigoDeArchivoBin en GitHub.

Compilar

El proyecto usa .NET 10 y los paquetes Digi21.DigiNG, Digi21.DigiNG.IO.BinDouble y Digi21.DigiNG.Plugin 26.0.0. Compila el proyecto desde la carpeta del repositorio:

dotnet build EliminaCodigoDeArchivoBin\EliminaCodigoDeArchivoBin.csproj -c Release -o C:\Herramientas\EliminaCodigoDeArchivoBin

Ejecutar

C:\Herramientas\EliminaCodigoDeArchivoBin\EliminaCodigoDeArchivoBin.exe digiBCA.Tab.xml 29091711.bind salida.bind 201
Argumento Descripción
<tabla de códigos> Ruta de una tabla de códigos. El programa no la usa, pero el argumento es obligatorio.
<archivo de entrada> Archivo .bind que se lee.
<archivo de salida> Archivo .bind en el que se escriben las copias.
<código a eliminar> Nombre del código que se quita. La comparación distingue mayúsculas y minúsculas.

Si faltan argumentos, el programa escribe en la salida de error el formato de uso. Por cada entidad que escribe, el programa escribe un asterisco (*) en la consola. Si se produce una excepción, escribe Se localizó el siguiente error: y el mensaje de la excepción.

Cómo funciona

using var archivoEntrada = new BinDouble(args[1]);
// El segundo argumento es readOnly: false abre el archivo en lectura y escritura.
using var archivoSalida = new BinDouble(args[2], false);
foreach (var entidad in archivoEntrada)
{
    // Las entidades borradas no se copian.
    if (entidad.Deleted)
        continue;

    var clonada = entidad.Clone();

    // Vacía los códigos de la copia y le añade los de la entidad original salvo el indicado.
    clonada.Codes.Clear();
    foreach (var código in entidad.Codes)
    {
        if (código.Name == args[3])
            continue;

        clonada.Codes.Add(código);
    }

    // La copia se ha quedado sin códigos: el código eliminado era el único que tenía.
    if (clonada.Codes.Count == 0)
        continue;

    archivoSalida.Add(clonada);
    Console.Write("*");
}
  • El programa no escribe las entidades cuyo único código era el eliminado.
  • El programa no copia las entidades que tienen la propiedad Deleted a true.
  • Si el archivo de salida no existe, BinDouble lo crea. Si existe, añade las entidades a las que ya tiene.
  • Al crear el archivo de salida, el programa no indica su sistema de referencia: no pasa un delegado que devuelva el WKT del archivo de entrada, como hace comprimir.