Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 746
от 21.05.2007, 23:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 484, Экспертов: 71
В номере:Вопросов: 3, Ответов: 9


Вопрос № 87088: есть текстовый файл с данными: фамилия возраст положение фамилия возраст итд... как найти и удалить одного человека? как организовать построчное(а не посимвольное) чтение?...
Вопрос № 87131: Мир в Ваш дом, уважаемые эксперты! Имею смелость спросить об одной вещи. C++ Builder 6.0. У меня есть компонент класса TPaintBox, в нем кое-что изображается. Мне нужно это сохранить в графический файл. Есть такая идея. Создаем перем...
Вопрос № 87150: Не получается написать прогграмму, которая задает вопрос тестирующему лицу, а он должен с клавиатуры ввести ответ(слово)....

Вопрос № 87.088
есть текстовый файл с данными:

фамилия
возраст
положение
фамилия
возраст
итд...

как найти и удалить одного человека?
как организовать построчное(а не посимвольное) чтение?
Отправлен: 15.05.2007, 23:46
Вопрос задал: Радзевич Иван Сергеевич (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Vest
Здравствуйте, Радзевич Иван Сергеевич!
Надо искать построчно и условно каждая третья строка (0, 3, 6) - это фамилия. То есть сравнивая её ты найдёшь нужного тебе человека. Удалить сложнее, так как просто так не удалить, а нужно создать пустой файл, скопировать в него ДО твоего человека, пропустить его и добавить ПОСЛЕ него остальных. Только так.
Построчно чтение можно организовать либо с использованием C++ потоков:
ifstream f("my.txt");
while (!f.eof())
{
f.getline(....);
}

или с помощью С-функций (прости, скопировал с MSDN)

#include <stdio.h>

int main( void )
{
FILE *stream;
char line[100];

if( fopen_s( &stream, "crt_fgets.txt", "r" ) == 0 )
{
if( fgets( line, 100, stream ) == NULL)
printf( "fgets error " );
else
printf( "%s", line);
fclose( stream );
}
}
---------
"Халявы не бывает" (c)
Ответ отправил: Vest (статус: 4-ый класс)
Ответ отправлен: 16.05.2007, 01:38

Отвечает: Mister Vova
Здравствуйте, Радзевич Иван Сергеевич!
FILE* MyFile
if ((MyFile = fopen("d:\map\file.txt", "rt"))== NULL) printf("Error");
/* vot kak */ fscanf(MyFile,"%s%d%s",&Fam,&voztast,&polojenie);
---------
Всё про Себя Тут Www.SahajaYoga.Ru
Ответ отправил: Mister Vova (статус: 3-ий класс)
Ответ отправлен: 16.05.2007, 15:23

Отвечает: Ilkras
Здравствуйте, Радзевич Иван Сергеевич!
построчное считывание реализовано стандартной функцией char *fgets( char *str, int n, FILE *stream); (<stdio.h>)
Как удалить блок записей относящихся к одному человеку:
читаете построчно файл, сравниваете фамилию с заданой, в случае совпадения стираете столько строк сколько занимает один блок (от фамилии до фамилии).
Как стереть строчку:
Можно построчно переписать один файл в другой игнорируя строку с известным заранее номером.
Ответ отправил: Ilkras (статус: 9-ый класс)
Ответ отправлен: 16.05.2007, 23:09

Отвечает: Ross
Здравствуйте, Радзевич Иван Сергеевич!

Если использовать потоки(fstream.h), то построчно файл удобно читать так:
ifstream inp_file("input.txt");

char str[256];
while (inp_file.getline(str,256))
{
//---делаем что-нибудь со считанной строкой
}

тогда цикл будет выполняться пока считываются строки и не нужно проверок на eof
---------
Доступно только то, что видимо (c) Б. Керниган
Ответ отправил: Ross (статус: 9-ый класс)
Ответ отправлен: 17.05.2007, 00:09


Вопрос № 87.131
Мир в Ваш дом, уважаемые эксперты!

Имею смелость спросить об одной вещи.
C++ Builder 6.0. У меня есть компонент класса TPaintBox, в нем кое-что изображается. Мне нужно это сохранить в графический файл.
Есть такая идея. Создаем переменную типа TImage, в нее заносим все изображенное в PaintBox'е, и уже тогда сохраняем ее в файл. Но проблема в том, как скопировать канву PaintBox'а в переменную типа TImage.

TImage *img = new TImage(0);

//img->Canvas = PaintBox1->Canvas;
//ошибка: 'TImage::Canvas' is not accessible

img->Height = PaintBox1->Height;
img->Width = PaintBox1->Width;
img->Picture->SaveToFile("F:BOOM.BMP");

Можно, конечно, перерисовать то что находится в PaintBox'е вручную в TImage, но это не рационально. Как по-другому?
Отправлен: 16.05.2007, 10:12
Вопрос задал: Ferruccio Bonipiero (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Vest
Здравствуйте, Ferruccio Bonipiero!
Почему бы тебе просто не скопировать изображение с одной канвы на другую.

Приложение:

---------
"Халявы не бывает" (c)

Ответ отправил: Vest (статус: 4-ый класс)
Ответ отправлен: 17.05.2007, 09:11
Оценка за ответ: 5
Комментарий оценки:
Все работает, спасибо, Vest!


Вопрос № 87.150
Не получается написать прогграмму, которая задает вопрос тестирующему лицу, а он должен с клавиатуры ввести ответ(слово).
Отправлен: 16.05.2007, 12:05
Вопрос задал: Костюченко Нина Сергеевна (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: wils0n
Здравствуйте, Костюченко Нина Сергеевна!
Вы имеете ввиду такое ?

#include<iostream>
#include<string>

using namespace std;

int main()
{
string name;
cout << "What is your name?" << endl;
cout << "> ";
cin >> name;
cout << "Hello " << name << "!" << endl;
return 0;
}

---------
Life is like a box with chocolate. You never know what you're gonna get. (c) Forrest Gump's mom
Ответ отправил: wils0n (статус: 8-ой класс)
Ответ отправлен: 16.05.2007, 12:18

Отвечает: menand
Здравствуйте, Костюченко Нина Сергеевна!

Немного изменю.. проверить правда не могу... но вроде всё правильно, программа сравнивает ввёдный ответ с обзазцом и выводит ОК если правильно иначе NO :

#include <stdio.h>
#include <conio.h>

void main()
{
char * otv;
puts("Vvedite otvet na vopros");
gets(otv);
if (otv=="otvet") {puts("OK!");} else { puts("NO!");};
}
Ответ отправил: menand (статус: Студент)
Ответ отправлен: 16.05.2007, 20:01

Отвечает: kool
Здравствуйте, Костюченко Нина Сергеевна!
Приблизительно как в приложении.

Приложение:

---------
I am.

Ответ отправил: kool (статус: Студент)
Ответ отправлен: 16.05.2007, 20:52

Отвечает: Ilkras
Здравствуйте, Костюченко Нина Сергеевна!
можно это сделать например так:

Приложение:

Ответ отправил: Ilkras (статус: 9-ый класс)
Ответ отправлен: 16.05.2007, 23:02


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.52 от 02.05.2007
Яндекс Rambler's Top100

В избранное