Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
Alekseenko
1 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 4
#1

Работа с текстовым файлом

21.10.2013, 18:45. Просмотров 1261. Ответов 7
Метки нет (Все метки)

Задание: "Удалить все четные числа из текстового файла"

Предварительно я загрузила текстовый файл в мемо1, а с мемо1 в масив и вот что получилось.

C++
1
2
3
4
5
6
7
8
9
10
OpenDialog1->FileName;
  if (OpenDialog1->Execute())
       {
        Memo1->Lines->LoadFromFile(OpenDialog1->FileName);
       }
 
 for (int i=0;i<Memo1->Lines->Count;i++)
{
 b[i]=StrToFloat (Memo1->Lines->Strings[i]);
}
Поиск четных и их удаление:
C++
1
2
3
4
5
6
for (int i=0;i<Memo1->Lines->Count;i++)
{
   if (b[i]%2==0)
       {  i++;
          b[i-1] = b[i];
        }
Кто-то может предложить более простой способ решения задачи, а то у меня что-то не получается - не работает программа.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.10.2013, 18:45
Ответы с готовыми решениями:

Работа с текстовым файлом
Поставлена задача находить ссылки на страницы из загруженной страницы HTML. ее...

Работа с текстовым файлом
Напишите программу, которая позволяет: а) выводить на экран содержи-мое...

Работа с текстовым файлом
В первом Memo1 в один столбик записаны значения координат X. Во втором Memo2 -...

RichEdit работа с текстовым файлом!
Компонент RichEdit после чтения текстового файла посчитывает количество строк,...

Работа с текстовым файлом C ++ Builder
В тексте надо проверить и исправить правила написания на русском языке букв И,...

7
gunslinger
случайный прохожий
1277 / 809 / 319
Регистрация: 20.07.2013
Сообщений: 2,268
21.10.2013, 19:13 #2
А где удаление? Как вариант, заменяешь четные значения на, допустим, нулевые и потом их "игнорируешь".
В результате элементы массива, не равные нулю, и будут тем, что требуется найти (поместишь их в текстовый файл).
C++
1
2
3
for (int i=0;i<Memo1->Lines->Count;i++)
  if (b[i]%2==0)
    b[i] = 0;
1
Alekseenko
1 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 4
21.10.2013, 23:07  [ТС] #3
gunslier, сейчас попробую ваш способ. Спасибо.

Но мне все же интересно почему это не работает, вроде как намного проще способ: проверять четное число и если оно четное, то заменить след. числом.
Цитата Сообщение от Alekseenko Посмотреть сообщение
C++
1
2
3
4
5
6
for (int i=0;i<Memo1->Lines->Count;i++)
{
if (b[i]%2==0)
{ *i++;             // переход к след. числу
 b[i-1] = b[i]; // заменяю предыдущее число текущим
}
Выдает ошибку на:
C++
1
if (b[i]%2==0)
BCC32 Error] Unit1.cpp(52): E2060 Illegal use of floating point
0
gunslinger
случайный прохожий
1277 / 809 / 319
Регистрация: 20.07.2013
Сообщений: 2,268
22.10.2013, 01:05 #4
Потому что элементы массива имеют (судя по всему) тип float, а операция % - получение остатка от деления - применима только для "целых чисел". Попробуй в условии (if) изменить b[i] на int(b[i]).
Я не претендую на звание знатока С++ (скорее наоборот), но тебе необходимо иметь хотя бы базовое представление о том, что ты делаешь и как это работает (имею в виду твой вариант кода).
1
Kulgar
509 / 194 / 26
Регистрация: 07.08.2013
Сообщений: 814
22.10.2013, 10:57 #5
Цитата Сообщение от Alekseenko Посмотреть сообщение
*i++;
У Вас инкримент указателя на итератор? В первом посте звёздочки нет. Опечатка?

И тут же ошибка в логике программы. При нахождении чётного элемента и замены его "следующим" на следующий итерации этот "следующий" элемент будет пропущен - два чётных подряд не отловятся.
Ещё смещение будет равно количеству найденных чётных.
1
Alekseenko
1 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 4
23.10.2013, 00:24  [ТС] #6
Все задача решена, сделала без массива намного проще. Спасибо всем за помощь.

Код программы:

Открытие файла и загрузка его в мемо:
C++
1
2
3
4
5
6
7
8
9
10
11
12
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 
 
OpenDialog1->FileName;
  if (OpenDialog1->Execute())
       {
        Memo1->Lines->Clear();
        Memo1->Lines->LoadFromFile(OpenDialog1->FileName);
       }
 
}
1. Удаление кратных чисел c выводом их в memo2;
2. Вывод среднего значения чисел больших 0 в edit.
3. Сохранение в отдельный файл.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
void __fastcall TForm1::Button2Click(TObject *Sender)
{
 
 
Memo2->Lines=Memo1->Lines;
 
for (int i=0;i<Memo2->Lines->Count;i++)
{
    TryStrToInt(Memo2->Lines->Strings[i],numb);
   if (int (numb%2)==0)
       {
          Memo2->Lines->Delete(i);
        }
}
for (int i=0;i<Memo2->Lines->Count;i++)
{
    TryStrToInt(Memo2->Lines->Strings[i],numb);
   if (numb>0)
       {
          s+=numb;
          j++;
        }
}
s=s/j;
Edit1->Text=s;
Memo2->Lines->SaveToFile("second.txt");
}
0
gunslinger
23.10.2013, 00:41
  #7

Не по теме:

Ну вот можешь, когда хочешь.

0
Kulgar
509 / 194 / 26
Регистрация: 07.08.2013
Сообщений: 814
23.10.2013, 09:25 #8
Цитата Сообщение от Alekseenko Посмотреть сообщение
for (int i=0;i<Memo2->Lines->Count;i++)
{
* * TryStrToInt(Memo2->Lines->Strings[i],numb);
* *if (int (numb%2)==0)
* * * *{
* * * * * Memo2->Lines->Delete(i);
* * * * }
}
При удалении i-й строки, i+1-я становится i-й. После этой строчки
Цитата Сообщение от Alekseenko Посмотреть сообщение
for (int i=0;i<Memo2->Lines->Count;i++)
итератор фактически будет на i+2-й позиции. В случае нахождения чётного числа нужен декремент.
1
23.10.2013, 09:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.10.2013, 09:25

Работа с таблицами Excel и текстовым файлом
Необходимо написать программу в которой расчитывается формула:одна переменная...

работа с файлом
Помогите! Как написать программу которая открывает уже сеществующий файл и...

Работа с bat-файлом
Подскажите, вот создаю батник: FileCreate(&quot;C:\\dd.bat&quot;); Как открыть этот...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru