Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Suprastin
0 / 0 / 0
Регистрация: 14.12.2012
Сообщений: 38
#1

Работа с файлами (переписать, чтобы перед каждой фамилией студента стоял его порядковый номер) - C++

17.12.2012, 17:29. Просмотров 623. Ответов 11
Метки нет (Все метки)

Есть задача.
Файл f1 содержит фамилии студентов. Переписать его в файл f2 таким образом, чтобы перед каждой фамилией студента стоял его порядковый номер.
С++ только начинаю познавать. Сделал так чтобы с 1-го во второй файл перезаписывались фамилии. Как сделать чтобы прибавлялся номер студента? Не совсем понимаю как соединить. Вот что я накодил:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream.h>
#include <stdio.h>
 
void main() {
FILE *ptrFile, *ptrFile2;
char s [100];
int i;
i=1;
ptrFile = fopen("file1.txt", "r");
ptrFile2 = fopen("file2.txt", "w");
    while (!feof(ptrFile))
    {
    fgets(s,100,ptrFile);
    fputs(s, ptrFile2);
    puts(s);
    }
    fclose (ptrFile);
    fclose (ptrFile2);
    getchar();
}
Заранее благодарю.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.12.2012, 17:29     Работа с файлами (переписать, чтобы перед каждой фамилией студента стоял его порядковый номер)
Посмотрите здесь:

переписать содержимое текстового файла в другой текстовый файл,добавляя в начало каждой строки её порядковый номер(с++) - C++
переписать содержимое текстового файла в другой текстовый файл,добавляя в начало каждой строки её порядковый номер

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

Установить порядковый номер дня в году по вводимому числу и месяцу (Переписать со структурой) - C++
Программа устанавливает порядковый номер дня в году по вводимому числу и месяцу. Код программы нужно переписать со структурой! ...

Минимальный элемент массива и его порядковый номер - C++
16. Дан массив А(6). Найти минимальный элемент массива и его порядковый номер. (с использованием только библиотеки math.h)

Найти минимальный элемент и его порядковый номер - C++
Дан массив x1,x2,...,x10. Найти минимальный элемент и его порядковый номер.

Найти максимальный элемент массива и его порядковый номер. - C++
17.Дан массив А(4). Найти максимальный элемент массива и его порядковый номер.

Определить порядковый номер его максимальной цифры в числе - C++
Дано натуральное число, в котором все цифры различны. Определить порядковый номер его максимальной цифры,считая номера от начала числа.

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
LValue
11 / 11 / 0
Регистрация: 27.11.2011
Сообщений: 49
17.12.2012, 18:14     Работа с файлами (переписать, чтобы перед каждой фамилией студента стоял его порядковый номер) #2
В файле фамилии должны быть разделены с помощью пробела или перевода на новую строку. Попробуйте прочитать не 100 байтов из файла, а по одной фамилии, тогда будет просто. Читайте из файла, до пробела или перехода на новую строку по одному символу, собирайте из них фамилию, добавляйте к ней номер и переходите к следующей фамилии.
Suprastin
0 / 0 / 0
Регистрация: 14.12.2012
Сообщений: 38
17.12.2012, 18:19  [ТС]     Работа с файлами (переписать, чтобы перед каждой фамилией студента стоял его порядковый номер) #3
Цитата Сообщение от LValue Посмотреть сообщение
В файле фамилии должны быть разделены с помощью пробела или перевода на новую строку. Попробуйте прочитать не 100 байтов из файла, а по одной фамилии, тогда будет просто. Читайте из файла, до пробела или перехода на новую строку по одному символу, собирайте из них фамилию, добавляйте к ней номер и переходите к следующей фамилии.
Думаю каждая на 1 строке.

Добавлено через 2 минуты
Цитата Сообщение от LValue Посмотреть сообщение
В файле фамилии должны быть разделены с помощью пробела или перевода на новую строку. Попробуйте прочитать не 100 байтов из файла, а по одной фамилии, тогда будет просто. Читайте из файла, до пробела или перехода на новую строку по одному символу, собирайте из них фамилию, добавляйте к ней номер и переходите к следующей фамилии.
Проблема как раз и есть в том что не совсем понятно как это делать ) С++ ну совсем не Паскаль - пытаюсь вникнуть. Думаю что там строки 3 не больше добавить надо. Но что именно не знаю.
LValue
11 / 11 / 0
Регистрация: 27.11.2011
Сообщений: 49
17.12.2012, 18:25     Работа с файлами (переписать, чтобы перед каждой фамилией студента стоял его порядковый номер) #4
Отлично, тогда читаете по символьно из первого файла. И заполняете новую строку этими символами пока не встретится новая строка.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
while (!feof(FILE1))
{
   // читаем символ из файла 1  
   char ch = getc(FILE1);
   if (ch != EOL)
   {
   // если это не символ конца строки, то добавляем его в строку с фамилией
   ...
   }
   else
  {
   // если символ конца строки, то записываем то, что было в строке (считаем что это фамилия) с порядковым номером.
  }
 
}
ну вроде такой ход мыслей должен быть. ИМХО.
Suprastin
0 / 0 / 0
Регистрация: 14.12.2012
Сообщений: 38
17.12.2012, 18:35  [ТС]     Работа с файлами (переписать, чтобы перед каждой фамилией студента стоял его порядковый номер) #5
Цитата Сообщение от LValue Посмотреть сообщение
Отлично, тогда читаете по символьно из первого файла. И заполняете новую строку этими символами пока не встретится новая строка.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
while (!feof(FILE1))
{
   // читаем символ из файла 1  
   char ch = getc(FILE1);
   if (ch != EOL)
   {
   // если это не символ конца строки, то добавляем его в строку с фамилией
   ...
   }
   else
  {
   // если символ конца строки, то записываем то, что было в строке (считаем что это фамилия) с порядковым номером.
  }
 
}
ну вроде такой ход мыслей должен быть. ИМХО.
Спасибо ) тут все ясно . Но как дозаписывать номер я так и не понял )
LValue
11 / 11 / 0
Регистрация: 27.11.2011
Сообщений: 49
17.12.2012, 18:41     Работа с файлами (переписать, чтобы перед каждой фамилией студента стоял его порядковый номер) #6
При такой организации программы будет не сложно записывать номер. Для этого нужно ввести счетчик фамилий и добавлять его значение в новый файл при записи.
Когда пишем фамилию в файл, с начала пишем значение счетчика, потом точку, потом пробел, потом фамилию. А в итого можно записать значение общего количества фамилий.
Suprastin
0 / 0 / 0
Регистрация: 14.12.2012
Сообщений: 38
17.12.2012, 18:51  [ТС]     Работа с файлами (переписать, чтобы перед каждой фамилией студента стоял его порядковый номер) #7
Цитата Сообщение от LValue Посмотреть сообщение
При такой организации программы будет не сложно записывать номер. Для этого нужно ввести счетчик фамилий и добавлять его значение в новый файл при записи.
Когда пишем фамилию в файл, с начала пишем значение счетчика, потом точку, потом пробел, потом фамилию. А в итого можно записать значение общего количества фамилий.
Спасибо что помогаете, но так и не разобрался.
LValue
11 / 11 / 0
Регистрация: 27.11.2011
Сообщений: 49
17.12.2012, 19:27     Работа с файлами (переписать, чтобы перед каждой фамилией студента стоял его порядковый номер) #8
Вечером напишу программу если до компилятора доберусь.
Suprastin
0 / 0 / 0
Регистрация: 14.12.2012
Сообщений: 38
17.12.2012, 19:31  [ТС]     Работа с файлами (переписать, чтобы перед каждой фамилией студента стоял его порядковый номер) #9
Цитата Сообщение от LValue Посмотреть сообщение
Вечером напишу программу если до компилятора доберусь.
Буду очень признателен. И сам буду стараться разобраться.
LValue
11 / 11 / 0
Регистрация: 27.11.2011
Сообщений: 49
17.12.2012, 23:07     Работа с файлами (переписать, чтобы перед каждой фамилией студента стоял его порядковый номер) #10
Вот программа. Проверил ее в Билдере 6. Если есть вопросы, пишите. Могу на почту прислать исходники проекта.
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
//---------------------------------------------------------------------------
 
#pragma hdrstop
#include <iostream.h>
#include <stdio.h>
 
 
//---------------------------------------------------------------------------
 
#pragma argsused
int main(int argc, char* argv[])
{
   FILE *ptrFile1, *ptrFile2;
   char Name [20];   // Г’ГҐГЄГіГ№Г*Гї ГґГ*ìèëèÿ ñòóäåГ*ГІГ*
   int i = 0;        // Ïîçèöèÿ Гў ГґГ*ìèëèè ñòóäåГ*ГІГ* äëÿ Г°Г*áîòû
   int Num = 0;      // Г’ГҐГЄГіГ№Г*Гї îáðГ*ГЎГ*òûâГ*ГҐГ¬Г*Гї ГґГ*ìèëèÿ ñòóäåГ*ГІГ*
   // ÎòêðûâГ*ГҐГ¬ ГґГ*éëû äëÿ Г°Г*áîòû
   // ГЏГ® õîðîøåìó Г*ГіГ¦Г*Г® ïðîâåðèòü ГЁГµ Г*Г*ëè÷èå, ïåðåä Г°Г*áîòîé
   ptrFile1 = fopen("file1.txt", "r");
   ptrFile2 = fopen("file2.txt", "w");
   // ГЋГ±Г*îâГ*îé öèêë ïðîãðГ*ììû
   // äî ГІГҐГµ ïîð, ïîêГ* Г*ГҐ ГЄГ®Г*ГҐГ¶ îñГ*îâГ*îãî ГґГ*éëГ*, îáðГ*ГЎГ*òûâГ*ГҐГ¬
   while (!feof(ptrFile1))
   {
      // Г—ГЁГІГ*ГҐГ¬ ñèìâîë ГЁГ§ ïðîãðГ*ììû
      // åñëè Г®Г* Г*ГҐ ГЄГ®Г*ГҐГ¶ ñòðîêè, ГІГ® Г§Г*ïèñûâГ*ГҐГ¬ ГҐГЈГ® Гў ГґГ*ìèëèþ
      // ГЏГ® õîðîøåìó Г*ГіГ¦Г*Г® îáðГ*ГЎГ*òûâГ*ГІГј Г§Г*Г*ГЄГЁ ïðåïèГ*Г*Г*ГЁГї ГЁ
      char ch = getc(ptrFile1);
      if (ch != '\n')
      {
         // Åñëè ГЅГІГ® Г*ГҐ ГЄГ®Г*ГҐГ¶ ñòðîêè,
         // äîáГ*âëÿåì ñèìâîë Гў Г*Г*ГёГі âñïîìîãГ*òåëüГ*ГіГѕ ñòðîêó
         Name[i] = ch;
         // äåëГ*ГҐГ¬ òåðìèГ*Г*ëüГ*ûé Г*óëü Г*Г* ГЄГ®Г*öå ñòðîêè, Г*Г* ñëó÷Г*Г©, åñëè ГЅГІГ® ïîñëåäГ*ГЁГ© ñèìâîë
         Name[i + 1] = '\0';
         // Óâåëè÷èâГ*ГҐГ¬ Г±Г·ГҐГІГ·ГЁГЄ äëÿ Г°Г*áîòû ГўГ*óòðè ГґГ*ìèëèè Г*Г* åäèГ*èöó
         i++;
      }
      else
      {
         // Åñëè ГЅГІГ® ГЄГ®Г*ГҐГ¶ ñòðîêè, ГІГ® ГґГ*ìèëèÿ Г§Г*ГЄГ®Г*Г·ГЁГ«Г*Г±Гј, ГҐГҐ ìîæГ*Г® Г§Г*ГЇГЁГ±Г*ГІГј Гў ГґГ*éë
         // Г*Г® òîëüêî åñëè ГЅГІГ® Г*ГҐ Г± Г±Г*ìîãî Г*Г*Г·Г*Г«Г* ГЄГ®Г*ГҐГ¶ ñòðîêè - îáðГ*áîòГ*ГІГј ГЅГІГ® Г*ГіГ¦Г*Г®
         // ÄåëГ*ГҐГ¬ ïåðåìåГ*Г*ГіГѕ, ГЄГіГ¤Г* ìû Г§Г*ГЇГЁГёГҐГ¬ ГґГ*ìèëèþ Г± Г*îìåðîì
         char NewName[25];
         // èñïîëüçóåì ñïðèГ*ГІГґ äëÿ ôîðìГ*òèðîâГ*Г*ГЁГї - Г±Г*ìûé áûñòðûé ГўГ*ðèГ*Г*ГІ, Гї
         // ГҐГЈГ® Г¤Г*æå Гў ГЄГ®Г*òðîëëåðГ*Гµ ïîëüçîâГ*Г«
         sprintf(NewName, "%d . %s \n", Num, Name);
         fputs(NewName, ptrFile2);
         // ïîçèöèþ Гў èìåГ*ГЁ îáГ*óëÿåì - äëÿ òîãî Г·ГІГ® ГЎГ» Г*Г*Г·Г*ГІГј Г± Г*Г*Г·Г*Г«Г*
         i = 0;
         // óâåëè÷èâГ*ГҐГ¬ Г±Г·ГҐГІГ·ГЁГЄ ГґГ*ìèëèé Г*Г* îäèГ*
         Num++;
         puts(NewName);
      }
   }
   fclose (ptrFile1);
   fclose (ptrFile2);
   getchar();
}
//---------------------------------------------------------------------------
Suprastin
0 / 0 / 0
Регистрация: 14.12.2012
Сообщений: 38
17.12.2012, 23:52  [ТС]     Работа с файлами (переписать, чтобы перед каждой фамилией студента стоял его порядковый номер) #11
Цитата Сообщение от LValue Посмотреть сообщение
Вот программа. Проверил ее в Билдере 6. Если есть вопросы, пишите. Могу на почту прислать исходники проекта.
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
//---------------------------------------------------------------------------
 
#pragma hdrstop
#include <iostream.h>
#include <stdio.h>
 
 
//---------------------------------------------------------------------------
 
#pragma argsused
int main(int argc, char* argv[])
{
   FILE *ptrFile1, *ptrFile2;
   char Name [20];   // Г’ГҐГЄГіГ№Г*Гї ГґГ*ìèëèÿ ñòóäåГ*ГІГ*
   int i = 0;        // Ïîçèöèÿ Гў ГґГ*ìèëèè ñòóäåГ*ГІГ* äëÿ Г°Г*áîòû
   int Num = 0;      // Г’ГҐГЄГіГ№Г*Гї îáðГ*ГЎГ*òûâГ*ГҐГ¬Г*Гї ГґГ*ìèëèÿ ñòóäåГ*ГІГ*
   // ÎòêðûâГ*ГҐГ¬ ГґГ*éëû äëÿ Г°Г*áîòû
   // ГЏГ® õîðîøåìó Г*ГіГ¦Г*Г® ïðîâåðèòü ГЁГµ Г*Г*ëè÷èå, ïåðåä Г°Г*áîòîé
   ptrFile1 = fopen("file1.txt", "r");
   ptrFile2 = fopen("file2.txt", "w");
   // ГЋГ±Г*îâГ*îé öèêë ïðîãðГ*ììû
   // äî ГІГҐГµ ïîð, ïîêГ* Г*ГҐ ГЄГ®Г*ГҐГ¶ îñГ*îâГ*îãî ГґГ*éëГ*, îáðГ*ГЎГ*òûâГ*ГҐГ¬
   while (!feof(ptrFile1))
   {
      // Г—ГЁГІГ*ГҐГ¬ ñèìâîë ГЁГ§ ïðîãðГ*ììû
      // åñëè Г®Г* Г*ГҐ ГЄГ®Г*ГҐГ¶ ñòðîêè, ГІГ® Г§Г*ïèñûâГ*ГҐГ¬ ГҐГЈГ® Гў ГґГ*ìèëèþ
      // ГЏГ® õîðîøåìó Г*ГіГ¦Г*Г® îáðГ*ГЎГ*òûâГ*ГІГј Г§Г*Г*ГЄГЁ ïðåïèГ*Г*Г*ГЁГї ГЁ
      char ch = getc(ptrFile1);
      if (ch != '\n')
      {
         // Åñëè ГЅГІГ® Г*ГҐ ГЄГ®Г*ГҐГ¶ ñòðîêè,
         // äîáГ*âëÿåì ñèìâîë Гў Г*Г*ГёГі âñïîìîãГ*òåëüГ*ГіГѕ ñòðîêó
         Name[i] = ch;
         // äåëГ*ГҐГ¬ òåðìèГ*Г*ëüГ*ûé Г*óëü Г*Г* ГЄГ®Г*öå ñòðîêè, Г*Г* ñëó÷Г*Г©, åñëè ГЅГІГ® ïîñëåäГ*ГЁГ© ñèìâîë
         Name[i + 1] = '\0';
         // Óâåëè÷èâГ*ГҐГ¬ Г±Г·ГҐГІГ·ГЁГЄ äëÿ Г°Г*áîòû ГўГ*óòðè ГґГ*ìèëèè Г*Г* åäèГ*èöó
         i++;
      }
      else
      {
         // Åñëè ГЅГІГ® ГЄГ®Г*ГҐГ¶ ñòðîêè, ГІГ® ГґГ*ìèëèÿ Г§Г*ГЄГ®Г*Г·ГЁГ«Г*Г±Гј, ГҐГҐ ìîæГ*Г® Г§Г*ГЇГЁГ±Г*ГІГј Гў ГґГ*éë
         // Г*Г® òîëüêî åñëè ГЅГІГ® Г*ГҐ Г± Г±Г*ìîãî Г*Г*Г·Г*Г«Г* ГЄГ®Г*ГҐГ¶ ñòðîêè - îáðГ*áîòГ*ГІГј ГЅГІГ® Г*ГіГ¦Г*Г®
         // ÄåëГ*ГҐГ¬ ïåðåìåГ*Г*ГіГѕ, ГЄГіГ¤Г* ìû Г§Г*ГЇГЁГёГҐГ¬ ГґГ*ìèëèþ Г± Г*îìåðîì
         char NewName[25];
         // èñïîëüçóåì ñïðèГ*ГІГґ äëÿ ôîðìГ*òèðîâГ*Г*ГЁГї - Г±Г*ìûé áûñòðûé ГўГ*ðèГ*Г*ГІ, Гї
         // ГҐГЈГ® Г¤Г*æå Гў ГЄГ®Г*òðîëëåðГ*Гµ ïîëüçîâГ*Г«
         sprintf(NewName, "%d . %s \n", Num, Name);
         fputs(NewName, ptrFile2);
         // ïîçèöèþ Гў èìåГ*ГЁ îáГ*óëÿåì - äëÿ òîãî Г·ГІГ® ГЎГ» Г*Г*Г·Г*ГІГј Г± Г*Г*Г·Г*Г«Г*
         i = 0;
         // óâåëè÷èâГ*ГҐГ¬ Г±Г·ГҐГІГ·ГЁГЄ ГґГ*ìèëèé Г*Г* îäèГ*
         Num++;
         puts(NewName);
      }
   }
   fclose (ptrFile1);
   fclose (ptrFile2);
   getchar();
}
//---------------------------------------------------------------------------
Шикарно. Спасибо большое. У меня не считывает последнюю фамилию. Попробую разобраться ))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.12.2012, 00:01     Работа с файлами (переписать, чтобы перед каждой фамилией студента стоял его порядковый номер)
Еще ссылки по теме:

Найти минимальный элемент массива и его порядковый номер. - C++
Дан массив целых чисел. Найти минимальный элемент массива и его порядковый номер. #include&lt;stdio.h&gt; #include&lt;conio.h&gt; ...

Найти элемент последовательности (его порядковый номер и значение), ближайший к n - C++
я не прошу код(но не откажусь). Хотя бы с чего мне начать подскажите задача: Дана последовательность вещественных чисел а1,а2, ..а15,...

Найти самое маленькое слово и записать его порядковый номер - C++
В общем,задание такое,найти самое маленькое слово и записать его порядковый номер,буду премного благодарен:good: А вот ошибки: &lt;:...

Разделить каждую цифру заданного числа на его порядковый номер - C++
Дано число. Разделить каждую цифру числа не его порядковый номер. #include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; int...

Определить максимальный элемент массива N (n) и его порядковый номер, где 0 <= n <= 45 - C++
Определить максимальный элемент массива B(n) и его порядковый номер, где 0 &lt;= n &lt;= 45. Мои наработки #include &lt;iostream&gt; using...


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

Или воспользуйтесь поиском по форуму:
LValue
11 / 11 / 0
Регистрация: 27.11.2011
Сообщений: 49
18.12.2012, 00:01     Работа с файлами (переписать, чтобы перед каждой фамилией студента стоял его порядковый номер) #12
Это потому что после последней фамилии не стоит перенос строки. Если поставите, то будет считывать. Или же в коде (я писал в комментах) нужно это обработать - конец фамилии это или перенос строки, или запятая или конец файла - тогда программа будет универсальной :-) Удачи. Если нужен исходник, могу кинуть на почту.
Yandex
Объявления
18.12.2012, 00:01     Работа с файлами (переписать, чтобы перед каждой фамилией студента стоял его порядковый номер)
Ответ Создать тему
Опции темы

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