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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 5.00
Qwer_ne_ne_ne
2 / 2 / 0
Регистрация: 06.01.2010
Сообщений: 44
#1

Возможно ли записать в последний символ EOF? - C++

24.05.2010, 11:11. Просмотров 1689. Ответов 4
Метки нет (Все метки)

Доброе время суток.
В текстовом файле заменить все последовательности идущих подряд пробелов одним пробелом.

Можно ли записать в последний символ EOF . То есть я не знаю как это сделать.


Структура типа FILE создается при открытии файла и в одном из ее элементов прописывается
длина файла. и я думаю что никакой EOF туда записать нельзя мол как то так :
C++
1
write_char(fp, seek_w, EOF);
Но так ни чего не работает.Препод пожимает пличами и говорил мол запиши туда его ... может я чего не знаю подскажите ?!
хотя я использую функцию которая обрезает фаил :
C++
1
 chsize(handle, seek_w);
Но она сказала что мол холтура (
Вот полный код:

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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include "stdafx.h"
#include "io.h"
#include "conio.h"
char read_char(FILE *fp, long seek_r);
void write_char(FILE *fp, long seek_w, char c);
// -----------------------------------------
int main(void)
{
 //  Открытие файла
 puts("enter name of file: ");
 char filename[50];
 scanf("%s", filename);
 FILE *fp;
 fp=fopen(filename, "r+t");
 if(fp==NULL)
 {
  puts("File not found");
  getch();
  return(0);
 }
 int handle=fileno(fp); 
 //Обработка файла
 long seek_r=0, seek_w=0; // Указатели для позиций чтения и записи
  char c;
 int flag=1;
 while((c=read_char(fp, seek_r))!=EOF)
 {
   if(c!=' ')
   {
    // Если текущий символ не пробел просто запишем его в файл
    write_char(fp, seek_w, c);
    seek_r++; seek_w++;
    flag=1; // и установим флаг
   }
   else
   {
    // Если текущий символ пробел
    if(flag==1)
    {
     // Если флаг установлен, то запишем пробел, сбросим флаг
     write_char(fp, seek_w, c);
     seek_r++; seek_w++;
     flag=0;
    }
    else
    {
     // А если флаг сброшен, то перейдем
     // на следующую позицию чтения файла
     seek_r++;
    }
   }
 } // while
 
 // Теперь обрежем файл
 
 chsize(handle, seek_w);
 fclose(fp);
 puts("Complete!");
 getch();
 return(1);
}
 
// Чтение символа из файла с заданной позиции
char read_char(FILE* fp, long seek_r)
{
 fseek(fp, seek_r, SEEK_SET);
 return((char)fgetc(fp));
}
// Запись в файл в заданную позицию
void write_char(FILE* fp, long seek_w, char c)
{
 fseek(fp, seek_w, SEEK_SET);
 fputc((int)c, fp);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.05.2010, 11:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Возможно ли записать в последний символ EOF? (C++):

Почему цикл с условием EOF читает последний символ 2 раза? - C++
Данная программа читает двоичную строку и выводит длину самой продолжительной цепочки нулей. Почему мой цикл читает 2 раза последнее...

Считать последний символ файла. Записать символ в конец файла - C++
Есть файл. Нужно сначала дописать в его конец один символ, а затем его считать. Как это сделать? Подскажите!

Каждый символ строки заменить на следующий за ним, а последний символ строки заменяеть первым - C++
я написал код но не могу разобраться. вот дано : ---------------------------------------------------------- В текстовом файле fin.txt...

Считать из этого файла какой-либо символ и записать этот символ в новый файл - C++
здравствуйте , помогите с решением следующего задания: естьтекстовый файл vvod.txt, в нем записана строка. мне нужно считать из этого...

Проверить, последний ли символ - C++
Мне нужно удалить символ 'a' с конца строки. Работаю с указателями. Вот в эту функцию подаётся указатель на строку, в конце которой...

Не выводиться последний символ файла - C++
файл содержит по числу на строке на экран почему то выводит все кроме 0 #include <iostream> #include <istream> #include...

4
dev001
36 / 36 / 3
Регистрация: 13.05.2010
Сообщений: 70
24.05.2010, 12:13 #2
символ EOF это -1 функции fread, fwrite и так далее возвращают его если например достигнут конец файл при чтении.
Мне если честно не понятно зачем его писать в файл последним символом?

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
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <conio.h>
 
int main(int argc, char **argv) {
    FILE *in, *out;
    int last, size = 64;
    int read_size = 4096;
    char *buff = NULL, *p, *buff1, *q;
    char filename[50];
    
    printf("enter filename: ");
    scanf("%s", filename);
    
    in = fopen(filename, "r");
    if(!in) {
        printf("cannot open file %s\n", filename);
        goto error_exit;
    }
    
    buf = malloc(size);
    /* как пример чтения */
    while((last = fread(buf, 1, 64, in)) != EOF) { // FIXME
          if(last > size) {
               size += last;
               buf = realloc(buf, size); // FIXME
          }
    }
    buf[size - 1] = 0;
    p = buf;
    fclose(in);
    buff1 = strdup(buf);
    q = buff1;
    for(; p < buf + size; p++) {
         if(*p == ' ' && p[1] == ' ') continue;
         else if(*p == ' ' && p[1] != ' ') *q = ' ';
         else *q++ = *p;    
    }
    out = fopen(filename, "w");
    fwrite(buff1, 1, strlen(buff1), out);
    fclose(out);
    return 0;
error_exit:
    return 255; // abort
}
код не тестировал, это как пример
1
Qwer_ne_ne_ne
2 / 2 / 0
Регистрация: 06.01.2010
Сообщений: 44
24.05.2010, 12:22  [ТС] #3
если закоментировать функцию
C++
1
chsize(handle, seek_w);
и вместо нее использовать
C++
1
write_char(fp, seek_w, EOF);
то есть когда последний символ то заканчивать фаил .у человека спрашивал одного он в этой сфере практикуеться он ответил что не как нельзя это сделать мол туда в "этот" хвостик будет помешатсья что угодно (
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
24.05.2010, 13:07 #4
EOF не символ, а признак конца. Никуда не пишется, а читается сопоставлением позиции с размером.
0
dev001
36 / 36 / 3
Регистрация: 13.05.2010
Сообщений: 70
24.05.2010, 13:51 #5
Цитата Сообщение от dev001 Посмотреть сообщение
символ EOF
звиняюсь не символ а макрос - #define EOF (-1)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.05.2010, 13:51
Привет! Вот еще темы с ответами:

Найти последний символ в строке - C++
найти последний символ в строке #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; void main() { string a; ...

Строка string, последний символ - C++
Подскажите, совсем голову сломал) В char массиве мы можем определить последний символ как '\0' А как найти его в string? Вот к...

Удалить последний строковый символ '\n' - C++
Здравствуйте! Подскажите пожалуйста, можно ли удалить последний строковый символ '\n' ?? Добавлено через 28 минут Нашлось решение

Не удаляется последний символ строки - C++
Почему не удаляет последний символ строки, выдает, что такого символа нет. Как это исправить, помогите, пожалуйста. puts(&quot;enter char for...


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

Или воспользуйтесь поиском по форуму:
5
Yandex
Объявления
24.05.2010, 13:51
Ответ Создать тему
Опции темы

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