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

Программа, работа с файлами - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.56
Kyter
0 / 0 / 0
Регистрация: 13.05.2010
Сообщений: 22
14.05.2010, 07:12     Программа, работа с файлами #1
Нужно разработать программу, которая ставит в начало каждой строки текстового файла столько пробелов, сколько в ней их встречается
Кто может, помогите пожалуйсто
Вот часть программы, который я написал, но она не робит, незнаю почему
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
#include <stdio.h>
#include <fstream.h>
#include <alloc.h>
#include <conio.h>
#include <string.h>
#include <iostream.h>
 
void main ()
{
 FILE *in;
 unsigned int i,u,j;
 j=0;
 char c;
 char str[100];
 char a[2];
 a[1]=' ';
  in=fopen("C:\cpp\BC\BIN\f1.txt","r");
   fgets (str,50,in);
   for (i=0;;i++)
  {
  fscanf (in,"%c",c);
  if (c==' ') {j++;}
  if (c=='\n') {break;}
  }
  fclose(in);
 in=fopen("C:\cpp\BC\BIN\f1.txt","a");
  fseek (in,i,SEEK_SET);
    for (u=0;;u++)
 {
  fprintf (in,"%c",a[1]);
  if (u>j) {break;}
 }
 fclose(in);
 getch();
}
Добавлено через 13 часов 15 минут
Поможет кто?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.05.2010, 07:12     Программа, работа с файлами
Посмотрите здесь:

C++ работа с файлами
C++ работа с файлами
C++ Программа зависает(работа с файлами)
C++ Консольная программа тестирования [работа с текстовыми файлами]
программа с файлами C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gh05t
47 / 46 / 4
Регистрация: 03.04.2010
Сообщений: 99
14.05.2010, 08:32     Программа, работа с файлами #2
C++
1
in=fopen("C:\cpp\BC\BIN\f1.txt","r");
замени на

C++
1
in=fopen("C:\\cpp\\BC\\BIN\\f1.txt","r");
ну и в 26 строке соответственно.
Kyter
0 / 0 / 0
Регистрация: 13.05.2010
Сообщений: 22
14.05.2010, 13:47  [ТС]     Программа, работа с файлами #3
Тоже не робит, смотрел по шагам, переменную j он не увелиивает (1 цыкл)
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
14.05.2010, 13:59     Программа, работа с файлами #4
Цитата Сообщение от Kyter Посмотреть сообщение
C
1
fscanf (in,"%c",c);
C
1
fscanf(in, "%c", &c);
функция должна принимать указатель
Kyter
0 / 0 / 0
Регистрация: 13.05.2010
Сообщений: 22
14.05.2010, 14:52  [ТС]     Программа, работа с файлами #5
Во, спасибо, вродибы заработало, но криво. Чтобы программа хоть как то работала, нужно в файле f1 перейти на новую строку, если этого не сделать, прогамма зависает
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
#include <stdio.h>
#include <fstream.h>
#include <alloc.h>
#include <conio.h>
#include <string.h>
#include <iostream.h>
 
void main ()
{
 FILE *in;
 unsigned int i,u,j;
 j=0;
 char c;
 char str[100];
  in=fopen("C:\\cpp\\BC\\BIN\\f1.txt","r");
//  fseek (in,0,SEEK_SET);
   for (i=1;;i++)
  {
  fscanf (in,"%c",&c);
  if (c==' ') {j++;}
  if (c=='\n' || c=='\r') {break;}
  }
  fclose(in);
 in=fopen("C:\\cpp\\BC\\BIN\\f1.txt","a");
  i=u;
  fseek (in,0,SEEK_SET);
    for (u=1;;u++)
 {
  fprintf (in,"%c",' ');
  if (u==j) {break;}
 }
 fclose(in);
// getch();
 
}
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
14.05.2010, 15:32     Программа, работа с файлами #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
#include <stdio.h>
#include <stdlib.h>
 
int main ()
{
   int i = 0;
   int nspace = 0;
 
   FILE *in;
 
   if((in = fopen("file.txt", "r")) == NULL)
   {
      puts("error: can't open file for read");
      return -1;
   }
 
   char c = 0;
   for(i = 0; c != '\n' && c != '\r' && !feof(in); ++i)
   {
      fscanf(in, "%c", &c);      
      if(c == ' ') 
         ++nspace;
   }
 
   fclose(in);
 
   if((in = fopen("file.txt", "a")) == NULL)
   {
      puts("error: can't open file for write");
      return -1;
   }
 
   fseek(in, 0, SEEK_SET);
 
   for(i = 0; i != nspace; ++i)
      fprintf(in, "%c", ' ');
   
   fclose(in);
   
   system("pause");   
}
Kyter
0 / 0 / 0
Регистрация: 13.05.2010
Сообщений: 22
16.05.2010, 09:19  [ТС]     Программа, работа с файлами #7
Да, в конец, незнаю,как сделать в начало, через ф-цию fseek() не получается, надо как то по другому, только вот как? Вот написал это сам, и столкнулся с той же проблемой, он записывает пробелы в конец строки. Если кто может помочь отредактировать мою программу, помогите. Спасибо
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
#include <stdio.h>
#include <fstream.h>
#include <alloc.h>
#include <conio.h>
#include <string.h>
#include <iostream.h>
 
void main ()
{
 FILE *in;
 unsigned int i,u,j,q;
 j=0;
 char c;
 char str[100];
  in=fopen("C:\\cpp\\BC\\BIN\\f1.txt","rt");
   fgets (str,128,in);
     for (i=0;;i++)
  {
  if (str[i]==' ') {j++;}
  if (str[i]=='\n' || str[i]=='\r') {break;}
  }
  fclose(in);
 in=fopen("C:\\cpp\\BC\\BIN\\f1.txt","at");
//  i=u;
  fseek (in,0,SEEK_SET);
    for (u=1;;u++)
 {
  fprintf (in,"%c",' ');
  if (u==j) {break;}
 }
 fclose(in);
// getch();
 
}
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
16.05.2010, 09:59     Программа, работа с файлами #8
Пробуй так: сначала прочитать весь файл в буфер, обработать буфер нужным образом и поместить буфер в файл. Потому что режим добавления данных подразумевает нулевую позицию в конце исходного файла. Я не думаю, что файлы будут настолько большими, что их не получиться прочитать целиком в память. Если же они будут действительно большими, то читай строку в буфер, обрабатывай ее и записывай в новый файл. Затем старый файл удалить и либо скопировать из нового, либо переименовать новый.
Kyter
0 / 0 / 0
Регистрация: 13.05.2010
Сообщений: 22
17.05.2010, 14:49  [ТС]     Программа, работа с файлами #9
Сделал с масивами программу, но опять же не работает, думаю проблемы с выделением/отчисткой памяти, подскажите, в чем ошибка
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
#include <stdio.h>
#include <fstream.h>
#include <alloc.h>
#include <conio.h>
#include <string.h>
#include <iostream.h>
 
void main ()
{
 FILE *in;
 unsigned int i,j;
 j=0;
 char str[128];
 char str2[128];
  in=fopen("C:\\cpp\\BC\\BIN\\f1.txt","rt");
 
  str[128]='\0';
  free(str);
  str2[128]='\0';
  free(str2);
 
   fgets (str,128,in);
   for (i=0;;i++)
  {
  if (str[i]==' ') {j++;}
  if (str[i]=='\n' || str[i]=='\r') {break;}
  }
  fclose(in);
 
  in=fopen("C:\\cpp\\BC\\BIN\\f1.txt","wt");
  for(i=0;i>j;i++)
  {
    str2[i]=' ';
  }
  strcat(str2,str);
  free(str);
  fputs(str2,in);
  free(str2);
  fclose(in);
//  getch();
 
}
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
17.05.2010, 20:19     Программа, работа с файлами #10
скажите, а зачем вы используете здесь free?
Kyter
0 / 0 / 0
Регистрация: 13.05.2010
Сообщений: 22
17.05.2010, 20:29  [ТС]     Программа, работа с файлами #11
Для отчистки масива
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
17.05.2010, 20:38     Программа, работа с файлами #12
Цитата Сообщение от Kyter Посмотреть сообщение
Для отчистки масива
Вам следует побольше почитать про эту функцию. Для очистки массива используйте функцию memset.
например вот так:
char str[n];
memset(str, 0, n);
edd
36 / 36 / 0
Регистрация: 13.05.2010
Сообщений: 81
17.05.2010, 23:35     Программа, работа с файлами #13
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <string>
#include <fstream>
using namespace std;
//void massiv (char*);
 
int main()
{   ifstream in ("111.txt");
    ofstream out ("222.txt");
    string s1, s2;
    while (getline (in,s1)){ 
        int x=0 , i=0; s1=s1+"\n";
        cout <<s1;
        while (s1[i]!='\n') 
        {   
            if (s1[i]==' ') x++; i++;} // считаем пробелы
        for (int i=0; i<=x; i++) s2=s2+" ";
        s2=s2+s1;
        out <<s2;}
 
return 0;
}
с файла в файл пишет без проблем

Добавлено через 1 час 19 минут
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
#include <iostream>
#include <stdio.h>
#include <string>
#include <fstream>
using namespace std;
//void massiv (char*);
 
int main()
{   ifstream in ("111.txt");
    ofstream out ("222.txt");
    string s1;
    while (getline (in,s1)){ 
        int x=0 , i=0; s1=s1+"\n";
        
        while (s1[i]!='\n') 
        {   
            if (s1[i]==' ') x++; i++;} // считаем пробелы
        string s2;
        for (int i=0; i<=x; i++) s2=s2+" ";
        s2=s2+s1;
        cout <<s2;
        out <<s2;
        }
return 0;}
пардон ошибочка маленькая была)))
Kyter
0 / 0 / 0
Регистрация: 13.05.2010
Сообщений: 22
18.05.2010, 12:21  [ТС]     Программа, работа с файлами #14
спасибо большое всем)
spider2010
Сообщений: n/a
06.06.2010, 20:49     Программа, работа с файлами #15
сорри
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.06.2010, 17:58     Программа, работа с файлами
Еще ссылки по теме:

программа с++ про количество слов (работа с файлами) C++
C++ Работа с файлами
Работа с файлами C++

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

Или воспользуйтесь поиском по форуму:
Artem158
0 / 0 / 0
Регистрация: 26.04.2010
Сообщений: 8
07.06.2010, 17:58     Программа, работа с файлами #16
ПОМОГИТЕ, оч прошу...ХЕЛП!!!

Создать текстовый файл с помощью ввода с клавиатуры его
строк. Определить в каждом парном строке слово максимальной
длины и записать его в конце предыдущего нечетного строки
Yandex
Объявления
07.06.2010, 17:58     Программа, работа с файлами
Ответ Создать тему
Опции темы

Текущее время: 17:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru