Hola a todos! me llamo Alex y tengo problemas con un programa que quiero hacer en C. Resulta que tengo que extraer para posteriores operaciones, de un archivo de 700mb q contiene números reales en formato ASCII de ESRI un pequeño rectangulo que corresponde a una zona en concreto de la comarca del Empordà. Este archivo es un modelo de elevaciones del terreno.
Dicho archivo funciona por coordenadas, el extremo inferior izquierdo tiene x= 257995 y y=4484975. Se trata de una malla 30 por 30, cada casilla que avanzamos nos movemos 30 metros.
Yo he supuesto que empiezo por el valor de arriba a la izqda con lo que ir hacia abajo represnta -30 y moverse en x a las casillas de la drcha representa +30.
Y quiero escribir en otro archivo, emporda.txt, aquellos valores en z y sus coordenadas x e y correspondientes, al rectangulo que a mi me interesa.Éste tiene como extremos la siguiente pareja de coordenadas;
x=484000
y=4680000
y la pareja de puntos
x=500000
y=4696000
He intentado realizar un programa en C, aprovechando los pocos conocimientos de este lenguaje que tengo. Utilizando archivos FST y unas funciones que he encontrado en la pagina del departamento de informatica de la escuela.
utilizando el emacs y el gcc como compilador, compila bien, pero al darle al exe, se abre el archivo de emproda.txt pero no escribe nada.
en Dos da el siguiente mensaje :
Assertion failed: feof((FILE *) f) || (ret == 1 && !ferror((FILE *) f)), file ma
lla30.c, line 77
La verdad es q voy bastante perdido, aver si me podeis orientar un poco. Muchas gracias!
Aquí os dejo el programa en C
fichero mallado30.c[/size]
#include <assert.h>
#include <entsort.h>
#include <stdio.h>
#include "fst1.h"
#define XMIN 484000
#define XMAX 500000
#define YMIN 4680000
#define YMAX 4696000
#define YFIN 4484975
#define XFIN 535015
#define FST_H
/*Inicio Programa*/
int main(void) {
float z;
FST f2,f1;
int m,i,j;
m==5;
z==0.0;
f1=AbrirFST(lectura,"mallapeque.txt");
f2=AbrirFST(escritura,"emporda.txt");
EscribirRealFST(f2,z);
for (i==0;i<=m-1;i++){
LeerRealFST(f1,&z);
for (i==4752005; i<=YFIN; i-30){
for (j==257995; j<=XFIN; j+30){
while ((i>=YMIN)&& (i<=YMAX)){
while((j>=XMIN) && (j<=XMAX)){
EscribirRealFST(f2,i);
EscribirRealFST(f2,j);
EscribirRealFST(f2,z);
}
}
}
}
}
CerrarFST(f1);
CerrarFST(f2);
}
/*definicion de los FST*/
FST AbrirFST(ModeFST m, const char *nom)
{
FST f;
if(m==lectura){
f=(FST)fopen(nom,"r");
}else if (m==escritura) {
f=(FST)fopen(nom,"w");
} else assert(0);
assert(f!=NULL);
return f;
}
void LeerRealFST(FST f, float *const z)
{
int ret;
ret=fscanf((FILE *) f, "%mallaque.txt",z);
assert(feof((FILE *) f) || (ret == 1 && !ferror((FILE *) f)));
}
void EscribirRealFST(FST f,float z)
{
int ret;
ret= fprintf((FILE *)f, "%g",z);
assert(ret>=0 && !ferror((FILE *)f));
}
void CerrarFST(FST f)
{
int ret;
ret=fclose((FILE *)f);
assert(ret ==0);
}
fichero fst1.h[/size]
/*
* Implementacion de las operaciones sobre FST
*/
#ifndef FST_H
#define FST_H
/* Inclusiones: libreriass estandard */
#include <stdio.h>
typedef enum {
lectura,
escritura
} ModeFST;
typedef FILE *FST;
FST AbrirFST(ModeFST m, const char *nom);
void LeerEnteroFST(FST f, int *const e);
void LeerRealFST(FST f, float *const r);
void LeerCaracterFST(FST f, char *const c);
void EscribirEnterFST(FST f, int e);
void EscribirRealFST(FST f, float r);
void EscribirCaracterFST(FST f, char c);
int FdFST(FST f);
void CerrarFST(FST f);
#endif
muchas gracias y siento el coñazo