Omar Andrs Zapata Mesa Grupo de Fenomenologa de Interaiones Fundamentales! "G#i#$ %ni&ersidad de Antio'uia E(S por onsola
Se re#iere a las operaiones 'ue ourren en el
telado y la pantalla de la omputadora)
*ara ello usamos una serie de #uniones
de#inidas en el A+SI! tales omo
get,ar
put,ar
gets
puts
*ara &er mas in#ormai-n so.re estas
#uniones &er man stdio),
/eamos el siguiente ejemplo0
Ejemplo 1inlude2stdio),3 int main"int arg!,ar 4arg&56$7 ,ar 8 do7 9get,ar"$8 i#"islo:er"$$put,ar"toupper"$$8 else put,ar"tolo:er"$$8 ;:,ile"<9=)=$8 ; 1inlude2stdio),3 int main"int arg!,ar 4arg&56$7 ,ar str5>?68 gets"str$8 print#"@La longitud es AdBn@!strlen"str$$8 ; Entrada y Salida Con Formato
La entrada y salida on #ormato es para
indiar 'ue se imprimirCn o se leerCn no solo arateres sino otros tipos de datos omo enteros! tipos punto #lotante! otal! ,eDadeimal! notai-n ient#ia et))
*ara esto se usa dos #uniones .Csiamente
'ue son print# y san#! para el ual! se usa una adena de ontrol 'ue india el #ormato a usar y luego los argumentos o &aria.les a leer o imprimir) /er Clases anteriores) Manejo de Ar,i&os
EDisten dos lases de tipos de ar,i&os
prinipalmente! los .u#ereados y no .u#ereados)
Los .u#ereados son a'uellos 'ue se montan
en ram uando se montan! los no .u#ereados son los 'ue permaneen en diso)
En el estCndar A+SI todos los ar,i&os son
.u##ereados pero en %+IE no todos lo son! por ejemplo el modo de letura teDto es .u##ereado pero letura en modo .inario no) Manejo de Ar,i&os
*ara a.rir un ar,i&o desde el odigo en C se usa
un puntero al tipo de dato FILE! 'ue ontiene in#ormai-n o omo el nom.re del ar,i&o! el modo de apertura y el indiador de posii-n)
Los modos de apertura son FrG read! G:G :rite! GaG
append! Gr.G read .inary! G:.G :rite .ianry! Fa.G append .inary y om.inaiones omo Fr:G letoesritura! Gr:.G letoesritura .inaria) FILE 4p#8 p#9#open"@nom.reHar,i&o@!@modoHapertura@$8 Manejo de Ar,i&os
put y y get son #uniones para leer y esri.ir
arateres en un ar,i&o)
A,ora suponga 'ue esta leyendo un ar,i&o y
neesita sa.er uCndo lleg- al #inal de la in#ormai-n ontenida en el! para esto se de#ini- EOF en stdio),! 'ue nos idia 'ue no ,ay mas datos a leer)
Es neesario despus de manipular el ar,i&o en
letura o esritura errar el idiador o puntero a #ile para li.erar la in#ormai-n o #lus,earla en diso! para ello se usa #lose)
Manejo de Ar,i&os
Iaerle #lus, a un ar,i&o es ,aer 'ue
la in#ormai=on del ar,i&o 'ue se enuentra en ram .aje inmediatamente a diso! para esto usamos la #uni-n ##lus,)
Cuando estamos en el #inal del ar,i&o y
'ueremos &ol&er al prinipio usamos re:ind)
A,ora &eamos un ejemplo on todas
estas #uniones0 Manejo de Ar,i&os
*ara manipular datos de ar,i&os .inarios
podemos usar #:rite y para leerlos #read8 estas #uniones tam.in estCn diseJadas para guardar de #orma .inaria tipos de datos omplejos omo estruturas! esto se onoe en el mundo de la programai-n omo la serialiKai-n de datos) /er mCs man #read #:rite)
*ara manipular el apuntador de posiion del
ar,i&o en ual'uier posii-n se usan las #uniones #seeL! #tell) Ejemplo 1inlude2stdio),3 FILE 4ptrAr,i&o5M68 int main"int arg!,ar 4arg&56$7 i#"arg 99 N$7 ptrAr,i&o5?69#open"arg&5O6!@r@$8 ptrAr,i&o5O69#open"arg&5M6!@:@$8 ,ar ,9= =8 :,ile"<#error"ptrAr,i&o5?6$$7 ,9get"ptrAr,i&o5?6$8 i#",99EOF$ .reaL8 put",!ptrAr,i&o5O6$8 ; #lose"ptrAr,i&o5?6$8 #lose"ptrAr,i&o5O6$8 ;else print#"@)(p input outputBn@$8 ; Ejemplo M Ar,i&os Pinarios
Los ar,i&os .inarios son a'uellos 'ue se
guardan en -digo solo entendi.le para la ma'uina! pero uno puede &er el ontenido usando por ejemplo oLteta) Ej0 demos nano test).in y oLteta test).in 1inlude2stdio),3 FILE 4ptrAr,i&o8 int main"int arg!,ar 4arg&56$7 ptrAr,i&o9#open"arg&5O6!@:.@$8 int dato9O?8 #:rite"Qdato!siKeo#"int$!O!ptrAr,i&o$8 #lose"ptrAr,i&o$8 ; Ejemplo N ##lus, 1inlude2stdio),3 FILE 4ptrAr,i&o8 int main"int arg!,ar 4arg&56$7 ptrAr,i&o9#open"@#lus,)tDt@!@:@$8 int i9?8 #or"i9?8i2O??????8iRR$7 print#"@AdBn@!i$8 #print#"ptrAr,i&o!@AdBn@!i$8 (( ##lus,"ptrAr,i&o$8 ; #lose"ptrAr,i&o$8 ; *ara este ejeriio &amos a parar el programa on rtR y mirar lo Sltimo 'ue imprimi- en pantalla y lo 'ue guard- en el ar,i&o usando y sin usar ##lus,) Tam.in el tiempo de ejeui-n sin usar ##lus, y usandolo) Ejemplo N re:ind #seeL 1inlude2stdio),3 FILE 4ptrAr,i&o5M68 int main"int arg!,ar 4arg&56$7 ptrAr,i&o5?69#open"@ar,i&oH#seeL)dat@!@:@$8 #print#"ptrAr,i&o5?6!@As@!@Gnu(LinuD De&elopers@$8 #lose"ptrAr,i&o5?6$8 ptrAr,i&o5O69#open"@ar,i&oH#seeL)dat@!@r@$8 int i9?8 #seeL"ptrAr,i&o5O6!O?!#tell"ptrAr,i&o5O6$$8 print#"@ABn@!#get"ptrAr,i&o5O6$$8 #seeL"ptrAr,i&o5O6!U!?$8 print#"@ABn@!#get"ptrAr,i&o5O6$$8 re:ind"ptrAr,i&o5O6$8 print#"@ABn@!#get"ptrAr,i&o5O6$$8 #lose"ptrAr,i&o5O6$8 ; #san# y #print# E(S on Formato
Estas dos #uniones se rearon para
leer(esri.ir datos #Cilmente en ar,i&os) Se usan similar a san# y print#! solo 'ue el primer algumento es el puntero del ar,i&o donde se &a a leer(esri.ir los datos)
getline y ssan# *ara proesar lneas de entrada
getline"$ lee una lnea entera! almaenando la
direi-n del .u##er 'ue ontiene el teDto)
ssan# lee su entrada de la adena de
arateres)
Estas dos #uniones se pueden usar en
onjunto para proesar una lnea de datos tomada de un ar,i&o! por lo regular se toma la lnea se ,ae una opia o se preproesa! luego on ssan# se toman los datos al estilo #san#! solo 'ue el primer argumento no es un puntero a FILE sino una adena de arateres) Ejeriios
Iaer un programa 'ue dado un par de
arateres por la lnea de ommandos 'ue remplaKe todo el ar,i&o! el primero por el segundo al estilo sed)
Iaer un programa 'ue dado un ar,i&o
por la lnea de omandos 'ue retorne la olumna pedida)