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
Deletedatrue. - Si el archivo de salida no existe,
BinDoublelo 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.