fscanf problem

Juraj Hilovsky hilovsky na unipo.sk
Středa Květen 31 07:21:17 CEST 2000


Tiez som mal ten problem, vyriesil som to tak, ze som si vytvoril funkciu na
citanie vstupu zo suboru, ktora to robi tak, ako chcem ja:

void CitajVetu(FILE* in1, char* b)
{
 int a,i;
 i=0;
 while(1)
 {
  a=getc(in1);
  if(a==0xa || feof(in1)) break;
  if(a==0xd) {getc(in1);break;}
  b[i]=a;
  i++;
 }
 b[i]=0;
}

Veta moze byt ukoncena znakom LF (0xa), alebo dvojicou CR+LF (0xd, 0xa).
Samozrejme, da sa to este vylepsit (aj to urobim).
------
Este k funkcii fscanf;
Zaujimava je nasledujuca vec:
zapis fscanf(stream,"%[^\n]%*c",buffer); v linuxe nacita sice ten prazdny
riadok, ale zostane na nom a cita ho az do zblbnutia (ak je v cykle).
V systeme MS-DOS tato funkcia pracuje korektne. To znamena, ze ked je v
riadku iba '\n', nacita prazdny retazec a pokracuje dalej.
V Linuxe je asi zbytocne hladat pre tuto funkciu vhodny zapis formatovacieho
retazca (takisto napr. aj v Solarise). Trapil som sa s tym dost a dosiel som
k zaveru, ze bude treba upravit zdrojak fscanf ( ale to nechavam na lepsich
odbornikov ako som ja ).
To je k tomuto problemu zatial vsetko.

Ing. Juraj Hilovsky
spravca serverov CVT PU
Presov
Slovakia

-----Původní zpráva-----
Od: Radek_Sedmak na eurotel.cz <Radek_Sedmak na eurotel.cz>
Komu: linux na linux.cz <linux na linux.cz>
Datum: 30. máj 2000 20:54
Předmět: fscanf problem


>Ahoj All,
>
>     asi jsem uplne tupej a tak se zeptam. Kdyz pouziju
>fscanf(stream,"%[^\n]%*[\n]",buffer) tak mi to nacte jeden radek ze streamu
do
>vystupniho bufferu, ale problem je co kdyz je ve vstupnim streamu jenom \n,
>protoze zapis %[^\n] rika cti dokud neni \n, coz mi samozrejme zustane stat
na
>miste v pripade ze vstup je pouze \n. Proto bych potreboval zapis cti dokud
neni
>\n vcetne onoho \n. Netusite nekdo please jak to zapsat do formatovaciho
retezce
>?
>
>
>
>Bye Sam




Další informace o konferenci Linux