Formatowanie pliku tekstowego, wg zasad jezyka polskiego :)

0

Witam, mam taki kod

//formatowanie bufora
        void funkc::format(char *b)
        {
                temp2=new char[3*rozmiarpliku];
                int x=0,p=0;
                for (int i=0;i<rozmiarpliku;i++)
                {

                        if((buf[0]>='a')&&(buf[0]<='z'))
                        {
                                buf[0]=buf[0]-32;
                        }

                 temp2[x]=buf[i];
                        if(buf[i]=='.')
                        {
                                temp2[x]=buf[i];
                                temp2[x+1]='\n';
                                x++;
                                       while(buf[i+1]==' ')
                                        {
                                                i++;
                                        }
                                if((buf[i+1]>='a')&&(buf[i+1]<='z'))
                                {
                                        buf[i+1]=buf[i+1]-32;
                                }

                        }

                        if(buf[i]==',')
                        {
                                temp2[x]=buf[i];
                                temp2[x+1]=' ';
                                x++;
                                       while(buf[i+1]==' ')
                                        {
                                                i++;
                                        }

                        }
                        if(buf[i]=='\n')

                                temp2[x]=buf[i];
                                x++;
                                       while(buf[i+1]=='\n')
                                        {
                                                i++;

                                        }

                        }

                x++;

                }



        }

Metoda wykonuje operacje na pliku tekstowym ( wczytanym do bufora -> buf znak po znaku),
i zapisuje znak po znaku do temp1, którego to zawartość jest zapisywana do pliku wynikowego.

Metoda ma na zadanie:

  1. lzamienić małę litery tam gdzie język polski tego wymaga( na początku pliku tekstowego, chyba ze to znak to go kasuejemy).

  2. Po znaku kropki przechodzić do następnej linii oraz jeżeli zajdzie taka potrzeba zamieni następną literę na dużą ( chyba że następnym znakiem jest nie litera i cyfra to usuwa). Jeżeli jest więcej znaków nowej linii to zostawia tylko 1 ( nie może być odstępu miedzy wierszami) oraz jeżeli zajdzie taka potrzeba zamieni następną literę na dużą ( chyba że następnym znakiem jest nie litera i cyfra to usuwa).

  3. Po znaku przecinku wstawia spacje, jeżeli jest to zostawia, a jeżeli jest więcej niż jedna spacja to zostawia jedną, oraz jeżeli zajdzie taka potrzeba to usuwa inne znaki dopóki nie spotka cyfry lub litery.

4* Najbardziej mi zależy na usuwaniu odstępów miedzy wierszami. Nie więcej niż jeden znak nowej linii między wierszami.

Część jest zrobiona.
Zapraszam do wspólnej dyskusji na temat tego problemu :)

0

Coś w tym stylu:

void funkc::format(char *buf)
{
	temp2=new char[3*rozmiarpliku];
	
	int 	x=0,p=0;
	bool	to_upper=true;
	bool	skip_wspace=true;
		
	for (int i=0;i<rozmiarpliku;++i)
	{
		if(skip_wspace && isspace(tab[i]))continue;
		skip_wspace=false;
	
		if(isalpha(buf[i]))
		{
			if(to_upper)
			{
				temp2[x++]=toupper(buf[i]);
				to_upper=false;
			}
			else temp2[x++]=buf[i];
			continue;
		}
		
		
		if(buf[i]=='.')
		{
			temp2[x++]=buf[i];
			temp2[x++]='\n';
			skip_wspace=true;
			to_upper=true;
			continue;
		}

		if(buf[i]==',')
		{
			temp2[x++]=buf[i];
			temp2[x++]=' ';
			skip_wspace=true;
			continue;
		}
		
		temp2[x++]=buf[i];
	}
}

PS. lepiej zrobić to na wskaźnikach/iteratorach, a jeszcze lepiej używając i(f/string)stream.

1 użytkowników online, w tym zalogowanych: 0, gości: 1