Formatovani textu ze souboru do souboru – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Formatovani textu ze souboru do souboru – C / C++ – Fórum – Programujte.comFormatovani textu ze souboru do souboru – C / C++ – Fórum – Programujte.com

 

Standa
~ Anonymní uživatel
122 příspěvků
6. 12. 2012   #1
-
0
-

Ahoj, pisu funkci na prekopirovani a zformatovani textu ze souboru do souboru. Tady je kod:

void zpracSouboru(FILE *vstup, FILE *vystup){
    int mezera=0;
    int veta=0;
    char c;
    while((c=getc(vstup))!=EOF){
        if(isspace(c)){
            if(veta==1 && mezera==0){
                putc(c,vystup);
                mezera=1;
            }
        }else if(c=='\n'){
            if(mezera==0 && veta==1){
                putc(' ',vystup);
                mezera=1;
            }
        }else if(c=='.'){
            putc(c,vystup);
            putc('\n',vystup);
            mezera=0;
            veta=0;
        }else{
            putc(c,vystup);
            veta=1;
            mezera=0;
        }
    }
}

Vstup:

       Toto       je
  prva    veta.Ahoj jak 
je. U
nas
  v pohode.

Ocekavany vystup:

Toto je prvni veta.

Ahoj jak je.

U nas v pohode.

Muj vystup:

Toto je
prva veta.
Ahoj jak je.
U nas
v pohode.

Mohl by mi prosim nekdo vysvetlit, kde mam v kodu chybu? Dekuji

Nahlásit jako SPAM
IP: 46.39.166.–
Standa
~ Anonymní uživatel
122 příspěvků
6. 12. 2012   #2
-
0
-

#1 Standa
Samozrejme ze v ocekavanem vystupu ma byt prva a ne prvni. Kazda veta ma byt na jednom radku.

Nahlásit jako SPAM
IP: 46.39.166.–
6. 12. 2012   #3
-
0
-

Jakou hodnotu má mít příznak veta když narazíš na . (tečku)?

Jinak bych zkusil krokovat v debuggeru. Jinak se příčiny nedobereš (nebo že by to někdo udělal za tebe?).

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Standa
~ Anonymní uživatel
122 příspěvků
6. 12. 2012   #4
-
0
-

Priznak veta ma byt po tecce rovny 0. Jinak programuju asi 2 mesice, takze debugger je pro me zatim neco absolutne neznameho. Ale zkusim se s nim nejak naucit

Nahlásit jako SPAM
IP: 46.39.166.–
oplis10
Newbie
6. 12. 2012   #5
-
0
-

#4 Standa
Zkus to třeba takhle

void zpracSouboru(FILE *vstup, FILE *vystup){
    int mezera=0, veta=0;
    char c;
    while((c=getc(vstup))!=EOF){
        if(isspace(c)&&veta==0)
            continue;
        veta=1;
        if(isspace(c) && veta!=0 && mezera==0)
        {
            mezera=1;
            if(c=='\n')
            {
                putc(' ',vystup);
                continue;
            }
            putc(c,vystup);
            continue;
        }
        if(isspace(c)&&mezera!=0)
        {
            continue;
        }
        mezera=0;
        if(c=='.')
        {
            putc(c,vystup);
            putc('\n',vystup);
            veta=0;
            continue;
        }
        putc(c,vystup);
    }
}

Nahlásit jako SPAM
IP: 195.212.199.–
zlz
~ Anonymní uživatel
634 příspěvků
6. 12. 2012   #6
-
0
-

No, nevím, ale já tam vidím potřebu jen ignorovat mezery (na začátku věty a vícenásobné mezery).

char c;
int ignorespace = 1;
while ((c = fgetc(vstup)) != EOF)
{
	if (isspace(c))
	{
		if (!ignorespace)
		{
			putc(' ', vystup);
			ignorespace = 1;
		}
	}
	else if (c == '.')
	{
		putc(c, vystup);
		putc('\n', vystup);
		ignorespace = 1;
	}
	else
	{
		putc(c, vystup);
		ignorespace = 0;
	}
}
Nahlásit jako SPAM
IP: 78.156.159.–
Standa
~ Anonymní uživatel
122 příspěvků
6. 12. 2012   #7
-
0
-

Obe vase reseni funguji, moc dekuji na ochotu. Nicmene bych chtel hlavne odhalit chyby v tom svem programu abych se pro priste poucil a vyhnul se jim(uz se snad dostavam na stopu). Proc ten posledni kod od zlz funguje bez reseni nacteni znaku noveho radku? getc znak noveho radku ignoruje resp. zjisti ze to je znak noveho radku, preskoci ho a nacte znak po nem? Dekuji

Nahlásit jako SPAM
IP: 46.39.166.–
KIIV
~ Moderátor
+43
God of flame
6. 12. 2012   #8
-
+1
-
Zajímavé

#7 Standa
funguje, protoze i \n je bran jako white space ... tudiz funguje stejne jako mezera...  a pokud se vypisuje prvni mezera, tak je zadana (vypsana) natvrdo ' ' a tudiz se nevypisuje znak, co se nacetl

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
KIIV
~ Moderátor
+43
God of flame
6. 12. 2012   #9
-
0
-

a samozrejme problem ve tvem kodu je prave to co sem zminil v predchozim prispevku... putc( c,vystup); misto: putc(' ',vystup);

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Standa
~ Anonymní uživatel
122 příspěvků
6. 12. 2012   #10
-
0
-

Super, dik moc, to jsem presne potreboval vedet. Vubec jsem netusil, ze to bere jako whitespace a ve svych materialech jsem to nikde nenasel, tak diky moc!! Pokud byste nekdo vedeli o overenych strankach, kde by byl treba vycet takovychto zakladnich informaci tak bych byl za to moc vdecny, kazdopadne dekuju vsem!!

Nahlásit jako SPAM
IP: 46.39.166.–
CZechBoY+4
Věrný člen
6. 12. 2012   #11
-
0
-
Nahlásit jako SPAM
IP: 213.192.10.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 41 hostů

Podobná vlákna

čtení textu ze souboru — založil Artis0608

Hledani textu v txt souboru — založil Mudraon

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý