elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [Ayuda] Eliminar entradas en un binario
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Ayuda] Eliminar entradas en un binario  (Leído 2,824 veces)
nolosabe

Desconectado Desconectado

Mensajes: 20



Ver Perfil
[Ayuda] Eliminar entradas en un binario
« en: 30 Octubre 2011, 17:59 pm »

Hola, que tal, yo de nuevo molestando, tengo un problema con un progrmita que tengo. tengo este codigo fuente que voy a poner a continucion, pero no me funciona bien la funcion "baja()" si me pueden ayudar estaria muy agradecido


Código
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <ctype.h>
  6.  
  7.  
  8. void alta();
  9. void baja();
  10. void modificar();
  11. void listarAnt();
  12. void listarPar();
  13. //void listarTodo();
  14. void consultar();
  15. void subMenu();
  16. int total();
  17.  
  18.  
  19. #define DICCIONARIO "diccio.bin"
  20.  
  21. struct dato{
  22. char palabra[20];
  23. char sinonimo1[20],sinonimo2[20],sinonimo3[20];
  24. char antonimo[20];
  25. char paronimo[20];
  26. }diccionario;
  27.  
  28. FILE *archivo = NULL;
  29.  
  30. void main(){
  31. int opcion=0;
  32. char salir='n';
  33. FILE*archivo;
  34. textbackground(0);
  35. archivo=fopen(DICCIONARIO,"ab");
  36. fclose(archivo);
  37.  
  38. while (salir!='s'){
  39. clrscr();
  40. textcolor(2);
  41. printf("\n   DICCIONARIO \n");
  42. printf("1) Ingresar \n");
  43. printf("2) Eliminar \n");
  44. printf("3) Modificar \n");
  45. printf("4) Consultar \n");
  46. printf("5) Listar \n");
  47. printf("0) Salir \n");
  48. opcion=getch();
  49. switch(opcion){
  50. case '1': alta();
  51. break;
  52. case '2': baja();
  53. break;
  54. case '3': modificar();
  55. break;
  56. case '4': consultar();
  57. break;
  58. case '5': subMenu();
  59. break;
  60. case '0': printf("\n ¨Esta seguro que desea salir? (s/n)");
  61. salir=tolower(getch());
  62. clrscr();
  63. break;
  64. default:printf("\n opcion incorrecta");
  65. getch();
  66. clrscr();
  67. break;
  68. }//fin switch
  69. }//fin while
  70. }//fin void main
  71.  
  72.  
  73.  
  74. void subMenu(){
  75. clrscr();
  76. int opc;
  77. char salir='n';
  78.  
  79. archivo=fopen(DICCIONARIO,"rb");
  80. if(archivo){
  81.  
  82. while(salir!='s'){
  83. clrscr();
  84. printf("\n Listar Palabras existentes \n");
  85.  
  86. printf("\n1) Listar antonimos");
  87. printf("\n2) Listar paronimos");
  88. printf("\n3) Listar: sinonimos, antonimos y paronimos");
  89. printf("\n0) Volver al menu principal\n");
  90.  
  91. opc=getch();
  92. clrscr();
  93. switch(opc){
  94.  
  95. case '1': listarAnt();
  96. break;
  97. case '2': listarPar();
  98. break;
  99. case '3': //listarTodo();
  100. //salir='s';
  101. break;
  102. case '0': salir='s';
  103. break;
  104. default:printf("\n OPCION INCORRECTA");
  105. getch();
  106. break;
  107. }//Fin switch submenu
  108. }//fin while
  109. }//fin if
  110. else{
  111. printf("\n OCURRIO UN ERROR AL ABRIR EL ARCHIVO");
  112. }//fin else
  113. }//fin subMenu
  114.  
  115.  
  116. int total(){
  117. clrscr();
  118. int total;
  119. FILE*archivo;
  120. archivo=fopen(DICCIONARIO,"rb");//abro el archivo diccionario.bin como solo lectura
  121. if(archivo==NULL){
  122. printf("\n Error al abrir el archivo");
  123. fclose(archivo);
  124. }
  125. else{
  126. fseek(archivo,0,SEEK_END);
  127. total=ftell(archivo) / sizeof(struct dato);//divido el tama¤o del archivo entre el tama¤o de la estructura para saber cuantas hay
  128. }
  129. return total;//devuelvo el valor de la variable total(int)
  130. }
  131.  
  132. void alta(){
  133. struct dato aux,aux2;
  134. char opc=' ',confirmar=' ';
  135. int encontrado=0,error=0;
  136.  
  137. clrscr();
  138. memset(&aux,0x00,sizeof(struct dato));
  139. printf("\n Ingresar palabra \n");
  140. printf("\n Palabra: ");
  141. memset(&aux.palabra,0x00,20);
  142. gets(aux.palabra);
  143. archivo=fopen(DICCIONARIO,"rb");
  144. if(archivo!=NULL){
  145. while(encontrado==0 && !feof(archivo)){
  146. if(aux.palabra[0]!='\0'){
  147. fread(&aux2,sizeof(struct dato),1,archivo);
  148. if(strcmp(aux.palabra,aux2.palabra)==0){
  149. ++encontrado;
  150. }
  151. }else{
  152. error=1;
  153. encontrado=99;
  154. }
  155. }//while
  156. clrscr();
  157. if(encontrado==0){
  158. printf("\n ¨Desea ingresar un sinonimo? (s/n)");
  159. opc=' ';
  160.  
  161. opc=tolower(getch());
  162. if(opc=='s'){
  163. clrscr();
  164. printf("\n\n ingrese un sinonimo: ");
  165. gets(aux.sinonimo1);
  166. opc=' ';
  167. clrscr();
  168. printf("\n\n ¨Desea ingresar otro sinonimo? (s/n)");
  169. opc=tolower(getch());
  170. if(opc=='s'){
  171. clrscr();
  172. printf("\n\n ingrese otro sinonimo: ");
  173. gets(aux.sinonimo2);
  174. opc=' ';
  175. clrscr();
  176. printf("\n\n ¨Desea ingresar otro sinonimo? (s/n)");
  177. opc=tolower(getch());
  178. if(opc=='s'){
  179. clrscr();
  180. printf("\n ingrese otro sinonimo: ");
  181. gets(aux.sinonimo3);
  182. opc='n';
  183. }//if3
  184.  
  185. }//if2
  186.  
  187. }//if1
  188.  
  189.  
  190.  
  191. clrscr();
  192. printf("\n Ingrese un antonimo: ");
  193. gets(aux.antonimo);
  194. printf("\n ¨Desea ingresar un paronimo? (s/n) ");
  195. opc=getch();
  196. if(opc=='s'){
  197. printf("\n Ingrese un paronimo: ");
  198. gets(aux.paronimo);
  199. }
  200. clrscr();
  201. printf(" Usted ingreso\n");
  202. printf("\n\n Palabra: %s \n Sinonimos: %s %s %s\n Antonimo: %s\n Paronimo: %s",aux.palabra,aux.sinonimo1,aux.sinonimo2,aux.sinonimo3,aux.antonimo,aux.paronimo);
  203. printf("\n\n Esta seguro que desea agregar estos datos al diccionario(s/n)");
  204. confirmar=tolower(getch());
  205. if(confirmar!='s'){
  206. printf("\n\n --------\n\n Los datos no se escribieron en el archivo");
  207. getch();
  208. }//IF
  209. else{
  210. if(confirmar=='s'){
  211. archivo=fopen(DICCIONARIO,"ab");
  212. strlwr(aux.palabra);strlwr(aux.sinonimo1);
  213. strlwr(aux.sinonimo2);strlwr(aux.sinonimo3);
  214. strlwr(aux.antonimo);strlwr(aux.paronimo);
  215. fwrite(&aux,sizeof(struct dato),1,archivo);
  216.  
  217. /*a continuacion lo que se hace es, que si
  218. existen sinonimos, estos se ingresen como palabra,
  219. la que era la palabra y los otros sinonimos
  220. se le ingresen como sinonimo, y el antonimo y paronimo
  221. se le ingresen tambien */
  222.  
  223. if(aux.sinonimo1[0]!='\0'){
  224. memset(&aux2,0x00,sizeof(struct dato));
  225. strcpy(aux2.sinonimo1,aux.palabra);
  226. strcpy(aux2.palabra,aux.sinonimo1);
  227. strcpy(aux2.sinonimo2,aux.sinonimo2);
  228. strcpy(aux2.sinonimo3,aux.sinonimo3);
  229. strcpy(aux2.antonimo,aux.antonimo);
  230. fwrite(&aux2,sizeof(struct dato),1,archivo);
  231. }//if aux sinonimo1
  232. if(aux.sinonimo2[0]!='\0'){
  233. memset(&aux2,0x00,sizeof(struct dato));
  234. strcpy(aux2.sinonimo2,aux.palabra);
  235. strcpy(aux2.palabra,aux.sinonimo2);
  236. strcpy(aux2.sinonimo1,aux.sinonimo1);
  237. strcpy(aux2.sinonimo3,aux.sinonimo3);
  238. strcpy(aux2.antonimo,aux.antonimo);
  239. fwrite(&aux2,sizeof(struct dato),1,archivo);
  240. }//if aux sinonimo2
  241. if(aux.sinonimo3[0]!='\0'){
  242. memset(&aux2,0x00,sizeof(struct dato));
  243. strcpy(aux2.sinonimo3,aux.palabra);
  244. strcpy(aux2.palabra,aux.sinonimo3);
  245. strcpy(aux2.sinonimo2,aux.sinonimo2);
  246. strcpy(aux2.sinonimo1,aux.sinonimo1);
  247. strcpy(aux2.antonimo,aux.antonimo);
  248. fwrite(&aux2,sizeof(struct dato),1,archivo);
  249. }//if aux sinonimo2
  250. fclose(archivo);
  251. }//if
  252. }//else
  253. }//primer if
  254.  
  255.  
  256. }//if encontrado
  257. if(encontrado==1){
  258. clrscr();
  259. printf("\n\n  LA PALABRA YA EXISTE EN EL DICCIONARIO");
  260. getch();
  261. }//encontrado = 1
  262. if(error==1){
  263. clrscr();
  264. printf("\n\n  Error, no ingreso ninguna palabra");
  265. gotoxy(2,8);
  266. printf("\n\n  Presione cualquier tecla para volver al menu principal\n");
  267. getch();
  268. }//error = 1
  269. }//funcion
  270.  
  271.  
  272.  
  273. void consultar(){
  274. struct dato aux;
  275. char palabra[20];
  276. int encontrado=0,ok=0,opc=0;
  277. FILE*archivo;
  278.  
  279. archivo=fopen(DICCIONARIO,"rb");
  280. if(archivo){
  281. fseek(archivo,0,SEEK_END);
  282. if(ftell(archivo)!=0)
  283. ok=1;
  284. fclose(archivo);
  285. }//if archivo
  286. if(ok==1){
  287. memset(&aux,0x00,sizeof(struct dato));
  288. archivo=fopen(DICCIONARIO,"rb");
  289. if(archivo!=NULL){
  290. printf("\n Ingrese la palabra a consultar: ");
  291. memset(&palabra,0x00,20);
  292. scanf("%s",&palabra);
  293. while(encontrado==0 && !feof(archivo)){
  294. fread(&aux,sizeof(struct dato),1,archivo);
  295. if(strcmp(palabra,aux.palabra)==0){
  296. ++encontrado;
  297. }//strcmp
  298. }//while
  299. fclose(archivo);
  300. if(encontrado!=0){
  301. clrscr();
  302. printf("\n ¨Que desea consultar? \n");
  303. printf("\n1) Mostrar todos los sinonimos");
  304. printf("\n2) Mostrar el antonimo");
  305. printf("\n3) Mosrar el paronimo");
  306. printf("\n4) Mostrar todo");
  307. printf("\n0) Volver al menu principal\n");
  308. opc=getch();
  309. switch(opc){
  310. case '1':printf("\n\n Palabra: %s \n Sinonimos: %s %s %s\n ",aux.palabra,aux.sinonimo1,aux.sinonimo2,aux.sinonimo3);
  311. getch();
  312. break;
  313. case '2':printf("\n\n Palabra: %s \n Antonimo: %s\n",aux.palabra,aux.antonimo);
  314. getch();
  315. break;
  316. case '3':printf("\n\n Palabra: %s \n Paronimo: %s",aux.palabra,aux.paronimo);
  317. getch();
  318. break;
  319. case '4':printf("\n\n Palabra: %s \n Sinonimos: %s %s %s\n Antonimo: %s\n Paronimo: %s",aux.palabra,aux.sinonimo1,aux.sinonimo2,aux.sinonimo3,aux.antonimo,aux.paronimo);
  320. getch();
  321. break;
  322.  
  323. case '0': break;
  324. default:printf("\n OPCION INCORRECTA");
  325. getch();
  326. break;
  327.  
  328. }//switch
  329. }//if encontrado
  330. else{
  331. printf("\n\n LA PALABRA NO EXISTE EN EL DICCIONARIO");
  332. getch();
  333. }//else
  334. }//if archivo!=NULL
  335. else printf("\n ERROR AL ABRIR EL ARCHIVO");
  336.  
  337. }// if ok=1
  338. else printf("\n ERROR AL ABRIR EL ARCHIVO");
  339.  
  340.  
  341. }
  342.  
  343. void listarAnt(){
  344. struct dato aux;
  345. int cont=0;
  346. FILE *archivo;
  347.  
  348. memset(&aux,0x00,sizeof(struct dato));
  349. archivo=fopen(DICCIONARIO,"rb");
  350. if(archivo!=NULL){
  351. fseek(archivo,0,SEEK_SET);
  352. gotoxy(3,2);
  353. printf("P A L A B R A      |");
  354. gotoxy(30,2);
  355. printf("A N T O N I M O\n");
  356. printf("------------------------------------------------|");
  357. gotoxy(1,5);
  358. while(!feof(archivo)){
  359. if(fread(&aux,sizeof(struct dato),1,archivo)){
  360. if(aux.antonimo[0]!='\0'){
  361. printf("\n %15s     |  %15s \n",aux.palabra,aux.antonimo);
  362. printf("------------------------------------------------|");
  363. cont++;
  364. if(cont==7){
  365. printf("\n Presione una tecla para continuar el listado");
  366. getch();
  367. cont=0;
  368. clrscr();
  369. gotoxy(3,2);
  370. printf("P A L A B R A      |");
  371. gotoxy(30,2);
  372. printf("A N T O N I M O\n");
  373. printf("------------------------------------------------|");
  374. gotoxy(1,5);
  375. }
  376. }
  377. }
  378. }
  379. fclose(archivo);
  380. getch();
  381. }
  382. }
  383.  
  384. void listarPar(){
  385. struct dato aux;
  386. int cont=0,salir=1;
  387. FILE *archivo;
  388.  
  389. memset(&aux,0x00,sizeof(struct dato));
  390. archivo=fopen(DICCIONARIO,"rb");
  391. if(archivo!=NULL){
  392. fseek(archivo,0,SEEK_SET);
  393. gotoxy(3,2);
  394. printf("P A L A B R A      |");
  395. gotoxy(30,2);
  396. printf("P A R O N I M O\n");
  397. printf("------------------------------------------------|");
  398. gotoxy(1,5);
  399. salir=1;
  400. while(!feof(archivo) && salir==1){
  401. if(fread(&aux,sizeof(struct dato),1,archivo)){
  402. if(aux.paronimo[0]!='\0'){
  403. printf("\n %15s     |  %15s \n",aux.palabra,aux.paronimo);
  404. printf("------------------------------------------------|");
  405. cont++;
  406. if(cont==7){
  407. printf("\n Presione una tecla para continuar el listado, o 0 (cero) para salir");
  408. getch();
  409. cont=0;
  410. clrscr();
  411. gotoxy(3,2);
  412. printf("P A L A B R A      |");
  413. gotoxy(30,2);
  414. printf("P A R O N I M O\n");
  415. printf("------------------------------------------------|");
  416. gotoxy(1,5);
  417. }
  418. }
  419. }
  420. }
  421. fclose(archivo);
  422. getch();
  423. }
  424. }
  425.  
  426.  
  427.  
  428.  
  429.  
  430.  
  431.  
  432.  
  433.  
  434. void modificar(){
  435. char opc='n';
  436. struct dato aux;
  437. FILE *archivo;
  438. archivo=NULL;
  439. char palabra[20];
  440. int encontrado=0,ok=0,select=0,pos=0;
  441. clrscr();
  442. archivo=fopen(DICCIONARIO,"rb");
  443. if(archivo!=NULL){
  444. fseek(archivo,0,SEEK_END);
  445. if(ftell(archivo)!=0)
  446. ok=1;
  447. fclose(archivo);
  448. }
  449. if(ok==1){
  450. memset(&aux,0x00,sizeof(struct dato));
  451. archivo=fopen(DICCIONARIO,"rb");
  452. if(archivo!=NULL){
  453. gotoxy(20,2);
  454. printf("MODIFICAR PALABRAS\n");
  455. printf("\n Ingrese la palabra a modificar: ");
  456. scanf("%s",&palabra);
  457. strlwr(palabra);
  458. pos=0;
  459. while(encontrado==0 && !feof(archivo)){
  460. fread(&aux,sizeof(struct dato),1,archivo);
  461. if(strcmp(palabra,aux.palabra)!=0)
  462. pos++;
  463. if(strcmp(palabra,aux.palabra)==0){
  464. encontrado=1;
  465. }//strcmp
  466. }//while
  467.  
  468. if(encontrado==1){
  469. fclose(archivo);
  470. clrscr();
  471. gotoxy(2,2);
  472. printf("Palabra:    %s",aux.palabra);
  473. gotoxy(2,4);
  474. printf("Sinonimo 1: %s",aux.sinonimo1);
  475. gotoxy(2,6);
  476. printf("Sinonimo 2: %s",aux.sinonimo2);
  477. gotoxy(2,8);
  478. printf("Sinonimo 3: %s",aux.sinonimo3);
  479. gotoxy(2,10);
  480. printf("Antonimo:   %s",aux.antonimo);
  481. gotoxy(2,12);
  482. printf("Paronimo:   %s",aux.paronimo);
  483. gotoxy(2,14);
  484. printf("Ingrese un campo a modificar");
  485. gotoxy(2,16);
  486. printf("1) Palabra");
  487. gotoxy(2,17);
  488. printf("2) Primer sinonimo");
  489. gotoxy(2,18);
  490. printf("3) Segundo sinonimo");
  491. gotoxy(2,19);
  492. printf("4) Tercer sinonimo");
  493. gotoxy(2,20);
  494. printf("5) Antonimo");
  495. gotoxy(2,21);
  496. printf("6) Paronimo");
  497. gotoxy(2,22);
  498. printf("9) Salir sin guardar");
  499. gotoxy(2,23);
  500. printf("0) SALIR Y GUARDAR");
  501. gotoxy(2,25);
  502. printf("OPCION: ");
  503. select=getch();
  504. while(opc!='s'){
  505. switch(select){
  506. case'1':gotoxy(14,2);
  507. printf("                            ");
  508. gotoxy(14,2);
  509. memset(aux.palabra,0x00,20);
  510. scanf("%s",&aux.palabra);
  511. gotoxy(11,25);
  512. select=getch();
  513. break;
  514. case'2':gotoxy(14,4);
  515. printf("                            ");
  516. gotoxy(14,4);
  517. memset(aux.sinonimo1,0x00,20);
  518. scanf("%s",&aux.sinonimo1);
  519. gotoxy(11,25);
  520. select=getch();
  521. break;
  522. case'3':gotoxy(14,6);
  523. printf("                            ");
  524. gotoxy(14,6);
  525. memset(aux.sinonimo2,0x00,20);
  526. scanf("%s",&aux.sinonimo2);
  527. gotoxy(11,25);
  528. select=getch();
  529. break;
  530. case'4':gotoxy(14,8);
  531. printf("                            ");
  532. gotoxy(14,8);
  533. memset(aux.sinonimo3,0x00,20);
  534. scanf("%s",&aux.sinonimo3);
  535. gotoxy(11,25);
  536. select=getch();
  537. break;
  538. case'5':gotoxy(14,10);
  539. printf("                            ");
  540. gotoxy(14,10);
  541. memset(aux.antonimo,0x00,20);
  542. scanf("%s",&aux.antonimo);
  543. gotoxy(11,25);
  544. select=getch();
  545. break;
  546. case'6':gotoxy(14,12);
  547. printf("                            ");
  548. gotoxy(14,12);
  549. memset(aux.paronimo,0x00,20);
  550. scanf("%s",&aux.paronimo);
  551. gotoxy(11,25);
  552. select=getch();
  553. break;
  554. case'9':opc='s';
  555. break;
  556. case'0':strlwr(aux.palabra);strlwr(aux.sinonimo1);
  557. strlwr(aux.sinonimo2);strlwr(aux.sinonimo3);
  558. strlwr(aux.antonimo);strlwr(aux.paronimo);
  559. archivo = fopen(DICCIONARIO, "rb+");
  560. fseek(archivo,sizeof(struct dato)*pos,SEEK_SET);
  561. fwrite(&aux,sizeof(struct dato),1,archivo);
  562. fclose(archivo);
  563. clrscr();
  564. gotoxy(15,12);
  565. printf("PALABRA MODIFICADA Y GUARDADA CORRECTAMENTE");
  566. opc='s';
  567. getch();
  568. break;
  569.  
  570. default:gotoxy(11,25);
  571. printf("opcion incorrecta");
  572. getch();
  573. gotoxy(11,25);
  574. printf("                 ");
  575. gotoxy(11,25);
  576. select=getch();
  577. break;
  578. }//switch
  579. }//while
  580. }//if encontrado
  581. }//if!=null
  582.  
  583. }//if ok
  584. }
  585.  
  586.  
  587.  
  588.  
  589. void baja(){
  590. int encontrado=0,ok=0,posicion=0;
  591. struct dato aux;
  592. char palabra[20],opc='n';
  593. FILE *archivo;
  594. clrscr();
  595. archivo=fopen(DICCIONARIO,"rb");
  596. if(archivo!=NULL){
  597. fseek(archivo,0,SEEK_END);
  598. if(ftell(archivo)!=0)
  599. ok=1;
  600. fclose(archivo);
  601. }
  602. if(ok==1){
  603. memset(&aux,0x00,sizeof(struct dato));
  604. memset(&palabra,0x00,20);
  605. archivo=fopen(DICCIONARIO,"rb");
  606. if(archivo!=NULL){
  607. gotoxy(20,2);
  608. printf("ELIMINAR PALABRAS\n");
  609. printf("\n Ingrese la palabra a eliminar: ");
  610. scanf("%s",&palabra);
  611. strlwr(palabra);
  612. while(encontrado==0 && !feof(archivo)){
  613. fread(&aux,sizeof(struct dato),1,archivo);
  614. if(strcmp(palabra,aux.palabra)==0){
  615. encontrado=1;
  616. }//strcmp
  617. }//while
  618. clrscr();
  619. if(encontrado==1){
  620. printf("\n Esta seguro que desea eliminar \n la siguiente entrada del diccionario (s/n)\n");
  621. printf("\n Palabra: %s \n Sinonimos: %s %s %s\n Antonimo: %s\n Paronimo: %s\n",aux.palabra,aux.sinonimo1,aux.sinonimo2,aux.sinonimo3,aux.antonimo,aux.paronimo);
  622. }
  623. else{
  624. printf("\n No se encontro la palabra ingresada\n");
  625. }
  626. fseek(archivo,0,SEEK_END);
  627. posicion=ftell(archivo);
  628. fclose(archivo);
  629. opc=getch();
  630. if(opc=='s' || opc=='S'){
  631. archivo=fopen(DICCIONARIO,"rb+");
  632.       // fseek(archivo,0,SEEK_SET);
  633. while(ftell(archivo)<=posicion){
  634. fread(&aux,sizeof(struct dato),1,archivo);
  635. fseek(archivo,sizeof(struct dato)*(-2),SEEK_CUR);
  636. fwrite(&aux,sizeof(struct dato),1,archivo);
  637. fseek(archivo,sizeof(struct dato),SEEK_CUR);
  638.  
  639. }
  640. fclose(archivo);
  641. }
  642. }
  643. }//if ok
  644. }//void


En línea

Gracias a todos por su ayuda, espero yo también ser de ayuda para alguien mas
satu


Desconectado Desconectado

Mensajes: 301

Siempre aprendiendo


Ver Perfil WWW
Re: [Ayuda] Eliminar entradas en un binario
« Respuesta #1 en: 30 Octubre 2011, 22:24 pm »

Hola

Tienes algunos errores de concepto, para borrar un registro de un fichero tienes que guardar los válidos en otro fichero y luego cambias el nombre del nuevo fichero.

Te pongo el código, aunque no lo he probado (paso de los errores por culpa de conio)
Código
  1. void baja()
  2. {
  3.    int encontrado=0, ok=0, posicion=0;
  4.    struct dato aux;
  5.    char palabra[20], opc='n';
  6.    FILE *fic_aux;
  7.  
  8.    archivo = fopen(DICCIONARIO,"r+b");
  9.    if(archivo != NULL)
  10.        {
  11.        fseek(archivo, 0, SEEK_END);
  12.        if(ftell(archivo) != 0)
  13.            {
  14.            fseek(archivo, 0, SEEK_SET);
  15.            memset(&aux, 0x00, sizeof(struct dato));
  16.            memset(&palabra, 0x00, 20);
  17.  
  18.            printf("ELIMINAR PALABRAS\n");
  19.            printf("\n Ingrese la palabra a eliminar: ");
  20.            gets(palabra);
  21.            strlwr(palabra);
  22.            while(encontrado==0 && !feof(archivo))
  23.                {
  24.                fread(&aux, sizeof(struct dato), 1, archivo);
  25.                if(strcmp(palabra, aux.palabra) == 0)
  26.                    encontrado=1;
  27.                }//while
  28.  
  29.            if(encontrado == 1)
  30.                {
  31.                printf("\n Esta seguro que desea eliminar la entrada del diccionario (s/n)\n");
  32.                printf("\n Palabra: %s \n Sinonimos: %s %s %s\n Antonimo: %s\n Paronimo: %s\n",aux.palabra,aux.sinonimo1,aux.sinonimo2,aux.sinonimo3,aux.antonimo,aux.paronimo);
  33.  
  34.                scanf("%c", &opc);
  35.                while(getchar()!='\n');
  36.  
  37.                if(opc=='s' || opc=='S')
  38.                    {
  39.                    fseek(archivo, -(sizeof(struct dato)), SEEK_CUR);
  40.                    posicion = ftell(archivo);
  41.                    fseek(archivo, 0, SEEK_SET);
  42.                    fic_aux = fopen("Auxiliar.bin", "wb");
  43.                    if(aux)
  44.                        {
  45.                        while(ftell(archivo) < posicion)
  46.                            {
  47.                            fread(&aux, sizeof(struct dato), 1, archivo);
  48.                            fwrite(&aux, sizeof(struct dato), 1, fic_aux);
  49.                            }
  50.                        //Adelantamos una posición el cursor
  51.                        fread(&aux, sizeof(struct dato), 1, archivo);
  52.                        while(!feof(archivo))
  53.                            {
  54.                            fread(&aux, sizeof(struct dato), 1, archivo);
  55.                            fwrite(&aux, sizeof(struct dato), 1, fic_aux);
  56.                            }
  57.                        fclose(aux);
  58.                        }
  59.                    }
  60.                }
  61.            else
  62.                printf("\n No se encontro la palabra ingresada\n");
  63.            }
  64.        else
  65.            printf("\nEl fichero esta vacio\n");
  66.  
  67.        fclose(archivo);
  68.  
  69.        remove(DICCIONARIO);
  70.        rename("Auxiliar.bin", DICCIONARIO);
  71.        }
  72.    else
  73.        printf("No se pudo abrir al fichero");
  74. }//void
  75.  

Saludos


En línea

Breakbeat como forma de vida
nolosabe

Desconectado Desconectado

Mensajes: 20



Ver Perfil
Re: [Ayuda] Eliminar entradas en un binario
« Respuesta #2 en: 31 Octubre 2011, 12:33 pm »

Hola, bueno, muchas gracias, ahora en cuanto pueda lo pruebo y si hay algun pequeño error se corrige rapido.
Pasa que no sabia que se podian tener 2 archivos abiertos al mismo tiempo, me habian dicho que no, y tampoco conocia la funcion rename.
gracias
En línea

Gracias a todos por su ayuda, espero yo también ser de ayuda para alguien mas
nolosabe

Desconectado Desconectado

Mensajes: 20



Ver Perfil
Re: [Ayuda] Eliminar entradas en un binario
« Respuesta #3 en: 31 Octubre 2011, 16:09 pm »

El unico error que encontre es que ingresa 2 veces la ultima palabra del diccionario, estoy tratando de arreglarlo, gracias
En línea

Gracias a todos por su ayuda, espero yo también ser de ayuda para alguien mas
nolosabe

Desconectado Desconectado

Mensajes: 20



Ver Perfil
Re: [Ayuda] Eliminar entradas en un binario
« Respuesta #4 en: 31 Octubre 2011, 16:25 pm »

Solucionado, modifique bastante el codigo, en la parte de escritura le puse un solo while y que escribiera en el otro archivo si y solo si "if(strcmp(palabra,aux.palabra)!=0)" entonces si por ejemplo quiero eliminar casa, y la palabra casa esta escrita 2 veces, la elimina las 2 veces que esta escrita y despues la condicion para que se cumpla el while es que una variable llamada posicion que se suma 1 cada vez que se ejecuta el fread, sea menor que la funcion total(); entonces no me da mas ese error que me repetia la ultima palabra

:D

gracias, me ha sido de mucha ayuda para hacer mim propio codigo...
se que esto son cosas sencillas pero por algo se empieza :D
En línea

Gracias a todos por su ayuda, espero yo también ser de ayuda para alguien mas
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[ code=C++] Conversor binario-decimal-binario « 1 2 »
Programación C/C++
Chonk 11 24,257 Último mensaje 9 Julio 2010, 17:52 pm
por Debci
eliminar ancestros de hojas arbol binario c++
Programación C/C++
Lain SEL 2 7,039 Último mensaje 18 Agosto 2010, 04:05 am
por Lain SEL
Eliminar nodo en un arbol binario
.NET (C#, VB.NET, ASP)
DaNuK 4 29,325 Último mensaje 6 Diciembre 2010, 20:19 pm
por DaNuK
Eliminar duplicados fichero binario
Programación C/C++
andrewmetal93 1 2,273 Último mensaje 9 Mayo 2012, 19:23 pm
por andrewmetal93
Ayuda!!! XNOR de 4 entradas con puertas NOR
Electrónica
mathias_vg 5 3,564 Último mensaje 9 Mayo 2014, 01:26 am
por adrianmendezRap
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines