Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > MFC-файлы


Автор: interceptor 4.10.2005, 20:31
Кто нибудь помогите мне нужно написать прогу которая из file1.dat копирует в file2.dat
пока не встретит слово >7 символов. Я вот написал она компилится но не работает
и еще как построчно читать фаил например чтоб удалить комментарии из него на MFC
мыло:ferter@ngs.ru


void CaaDlg::OnBnClickedButton1()
{
CString buffer;
CString buffer1;
CString buffer2;
int j=0;
CStdioFile InFile1("c:\\temp\\file1.dat", CFile::modeRead);
CFile InFile2("c:\\temp\\file2.dat", CFile::modeWrite);
InFile1.ReadString( buffer);
LPSTR ps = buffer.GetBuffer(1024);
LPSTR ps1 = buffer1.GetBuffer(1024);
LPSTR ps2 = buffer2.GetBuffer(1024);
for(int i=0;i<1024;i++)
{
j++;
ps[i]==ps1[i]; //почему ps[i] не записывает в ps1[i] ?

buffer.ReleaseBuffer();
buffer1.ReleaseBuffer();
if(ps[i]==' ')
{buffer.ReleaseBuffer();

j=0;}
if(j==7)
{ps1==ps2; // почему?
buffer1.ReleaseBuffer();
buffer2.ReleaseBuffer();
}

}

InFile2.Write( buffer2,strlen(buffer2));
InFile1.Close();
InFile2.Close();

}

Автор: DeadSoul 4.10.2005, 20:54
Цитата(interceptor @ 4.10.2005, 20:31)
и еще как построчно читать фаил например чтоб удалить комментарии из него на MFC

см. CStdioFile

Автор: interceptor 5.10.2005, 09:05
Че то всеравно ниччего не получается Может поможете написать цикл а то я у же 1.5 недели парюсь


void CaaDlg::OnBnClickedButton1()
{
CString buffer;
CString buffer1;
CString buffer2;
int j=0;
CStdioFile InFile1("c:\\temp\\file1.dat", CFile::modeRead);
CFile InFile2("c:\\temp\\file2.dat", CFile::modeWrite);
//InFile1.ReadString( buffer);
LPSTR ps = buffer.GetBuffer(1024);
LPSTR ps1 = buffer1.GetBuffer(1024);
LPSTR ps2 = buffer2.GetBuffer(1024);
for(int i=0;i<1024;i++)
{
InFile1.ReadString( buffer);
j++;
ps[i]=ps1[i]; //почему ps[i] не записывает в ps1[i] ?

buffer.ReleaseBuffer();
buffer1.ReleaseBuffer();
if(ps[i]==' ')
{buffer.ReleaseBuffer();

j=0;}
if(j==7)
{ps1=ps2; // почему?
buffer1.ReleaseBuffer();
buffer2.ReleaseBuffer();
}

}

InFile2.Write( ps2,strlen(ps2));
InFile1.Close();
InFile2.Close();

}

Автор: Coocky 5.10.2005, 11:10
Код

void CaaDlg::OnBnClickedButton1()
{
CString temp;
CString temp2;


CStdioFile InFile1("c:\\temp\\file1.dat", CFile::modeRead);

int begin_word=0; //начало слова

while(InFile.ReadString( temp))//Пока не прочитаем все...

   {

enum {start, word, separator};

    int state = start;

    if (temp.GetLength()==0)

    {

    contunie;
                } 

    if (temp.GetLength()!=0)

    {
        for (int i = 0; i < temp.GetLength(); ++i)
{
   switch(state)

  {
  case start:

  case separator:
      if (IsSeparator(temp.GetAt(i))!=-1)

  {
     state = word;

temp2=temp.Mid(begin_word,i); //Берем слово
begin_word=i;
if (temp2.GetLength()>7) //Проверяем

  {
temp=temp.Replace(temp2,"");//Вырезаем


   }

  
  }
  break;
  
  case word:
  if (IsSeparator(temp)==-1)
  {
      state = separator;
     
  } 

   break;

  }

}

    }

   }




//////////////////////Функция для разделения строки на слова...................
int CaaDlg::IsSeparator(CString s)
{
    CString separators = _T(" ,.;:?!-()"); // Разделители для слов,список можно варьировать
    int x=separators.Find(s);
   return x;
}

Вроде так, писал без компилятора. Сам проверь и подправь smile

Автор: interceptor 5.10.2005, 20:49
Coocky что то твой код не работает он даже во второй фаил не пишет

Автор: Coocky 5.10.2005, 22:50
interceptor
Цитата(interceptor @ 5.10.2005, 20:49)
Coocky что то твой код не работает он даже во второй фаил не пишет

smile
Да он только читает-ты ж комментарии смотри! smile

Автор: Earnest 7.10.2005, 14:08
Цитата(interceptor @ 4.10.2005, 20:31)
ps[i]==ps1[i]; //почему ps[i] не записывает в ps1[i] ?

Цитата(interceptor @ 5.10.2005, 09:05)
ps[i]=ps1[i]; //почему ps[i] не записывает в ps1[i] ?

Ну и вопросы у тебя...
Может все-таки сам догадаешься?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)