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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
DEM90
17 / 17 / 1
Регистрация: 06.05.2009
Сообщений: 115
#1

Вставить слово после определённого символа (в файл) - C++

17.05.2009, 01:46. Просмотров 1472. Ответов 13
Метки нет (Все метки)

Надо открыть файл, прочитать из него инфу и вставить после пятого символа какое-то слово (введёное пользователем), если длина первого слова меньше 5, то ничего ен делать...

знаю что надо с помощью функции fseek(); поставить указатель после пятого элемента в файл, но что дальше? Заранее спаисбо за помощь!

Добавлено через 6 часов 36 минут 45 секунд
Вот функция, помогите пожалуйста, он почему-то записывает всё в конец
C++
1
2
3
4
5
6
7
void edit_file(char filename[30], char str[10])
{
  FILE *fp;
  fp=fopen(filename, "a");
  fseek(fp, 5, SEEK_SET);
  fputs(str,fp);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.05.2009, 01:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вставить слово после определённого символа (в файл) (C++):

Запись текста в файл до определённого символа - C++
Здравствуйте всем! Помогите мне пожалуйста в правильности написания программы. Мне нужно через массив написать текст и текст должен...

Вставить после каждого символа «.» один символ « » (пробел), если после точки нет пробела. - C++
Вставить после каждого символа «.» один символ « » (пробел), если после точки нет пробела. Как сделать так, чтоб между точкой и...

В тексте после указанного символа вставить подстроку - C++
в тексте после указанного символа вставить подстроку

В тексте после указанного символа вставить подстроку - C++
Помогите сделать лабораторку пожалуйста)

После пятого символа первой строки вставить вторую - C++
Привет,помогите пожалуйста.У меня задание-есть две строки.Нужно после пятого символа первой строки,ввести вторую ,а после этого добавить...

После 1-го символа каждого слова вставить последовательность символов - C++
Раздвинуть заданный текст, вставив введенную с клавиатуры последовательность символов после 1-го символа каждого слова. Помогите...

13
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
17.05.2009, 01:56 #2
Если я правильно помню, "a" - append всегда ставит указатель в конец файла на добавление. Используй "w".
0
DEM90
17 / 17 / 1
Регистрация: 06.05.2009
Сообщений: 115
17.05.2009, 02:01  [ТС] #3
но ведь "w" создаёт файл, а если такой есть, то заменяет его.
0
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
17.05.2009, 02:07 #4
OK. значит сделай "a" а потом rewind. Хотя, на операциях он вроде его автоматически в конец файла будет позиционировать.
2
Новичёк
0 / 0 / 0
Регистрация: 16.05.2009
Сообщений: 8
17.05.2009, 02:11 #5
C++
1
2
3
4
5
6
7
8
void edit_file(char filename[30], char str[10])
{
  FILE *fp;
    fp=fopen(filename, "a");
    rewind(fp);
    fseek(fp, 5, SEEK_SET);
  fputs(str,fp);
}
сделал так, но всё равно добавляет в конец
0
DEM90
17 / 17 / 1
Регистрация: 06.05.2009
Сообщений: 115
17.05.2009, 02:13  [ТС] #6
У тоже сделал так, но ничего
0
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
17.05.2009, 02:15 #7
Чтобы вставить в середину файла тебе его нужно полностью переписать, как всегда. Читать ты можешь откуда угодно.

Добавлено через 1 минуту 55 секунд
"ничего" потому писать можно только в конец файла. Читать - произвольно. Сначала тебе нужно установить позицию, чтобы прочитать есть ли у тебя там слово длиной пять, а потом перезаписать в случае его наличия. Файл. Полностью.

P. S. не...rewind я тебе сказал не для записи, а для чтения и проверки. Записать ты сможешь только в конец всегда.
0
DEM90
17 / 17 / 1
Регистрация: 06.05.2009
Сообщений: 115
17.05.2009, 02:19  [ТС] #8
Vourhey, ясно, постараюсь переписать... еще раз спасибо
0
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
17.05.2009, 02:20 #9
Просто запомни, что запись всегда в конец, только читать ты можешь произвольно.
0
DEM90
17 / 17 / 1
Регистрация: 06.05.2009
Сообщений: 115
17.05.2009, 03:12  [ТС] #10
C++
1
2
3
4
5
6
7
8
9
10
11
12
    char strin[100];
    fread(&strin, sizeof(strin), sizeof(fp), fp);
  cout << "Byl takoy text: \n" << strin << "\n";
    int prov;
    for(int i=0;i<n;i++)
    {
        if(strin[i]==" ")
        {
            prov=0;
            cout <<"QQQQ";
        }
    }
вот кусок кода, а он выдаёт ошибку:
error C2040: '==' : 'int' differs in levels of indirection from 'const char [2]'
что тут не так?
0
Gravity
564 / 558 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
17.05.2009, 03:27 #11
Код
if(strin[i]==" ")
Нельзя сравнивать символ со строкой. Правильно так
Код
if(strin[i] == ' ')
1
DEM90
17 / 17 / 1
Регистрация: 06.05.2009
Сообщений: 115
17.05.2009, 18:46  [ТС] #12
Большое спасибо! Нда... С++ действительно намного сложнее чем РНР

Добавлено через 2 минуты 11 секунд
Но всё же еще один вопрос, он мне в консоль выводит текст файла (так и надо) и сразу за ним: "|Ш*5" (без кавычек), хотя такой строчки и близко нету...

Добавлено через 23 минуты 13 секунд
А сейчас она стала выводить только 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
36
37
38
39
40
41
42
43
44
#include <conio.h>
#include <stdio.h>
#include <iostream>
using namespace std;
 
void editfile(char filename[30], char str[1], int n, char filename2[30])
{
    n--;
  FILE *fp;
    fp=fopen(filename, "r");
    rewind(fp);
    char strin[100];
    fread(strin, sizeof(strin), sizeof(fp), fp);
  cout << "Byl takoy text: \n" << strin << "\n";
    int prov;
    for(int i=0;i<n;i++)
    {
        if(strin[i]==' ')
        {
            prov=0;
        }
    }
    
    if(prov!=0)
    {
        strin[n] = str[0];
    }
 
    fclose(fp);
    FILE *fp2;
    fp2 = fopen(filename2, "w");
    fwrite(strin, 30, 30, fp2);
    fclose(fp);
    fclose(fp2);
}
 
 
int main(void)
{
    int n;
    cin >> n;
    editfile("file11.txt", "@", n, "file2.txt");
  system("PAUSE");
}
Добавлено через 14 часов 48 минут 43 секунды
Неужели никто не знает
Просто работало всё норм, а потом резко стало выдавать только один символ
0
DEM90
17 / 17 / 1
Регистрация: 06.05.2009
Сообщений: 115
19.05.2009, 03:20  [ТС] #13
Сколько не мучаюсь, никак ен могу найти ошибку Может всё таки кто-нибудь поможет? Будут очень признателен
0
Evg
Эксперт CАвтор FAQ
18248 / 6373 / 438
Регистрация: 30.03.2009
Сообщений: 17,641
Записей в блоге: 28
19.05.2009, 08:47 #14
1. В fread и fwrite третьим параметром надо подавать единицу
2. Ты два раза делаешь fclose (fp);
3. В 26-й строке ты просто переписываешь один символ в строке. Вставка не так делается. Просто в Си вообще нет понятия строки, а если работаешь с массивом char'ов, то все операции надо ручками делать. Лучше используй string

И опиши в чём выражаештся что не работает. Как запускаешь, куда нажимаешь, что выводится и т.п.
0
19.05.2009, 08:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.05.2009, 08:47
Привет! Вот еще темы с ответами:

Дан символ С и строки S, S0. После каждого вхождения символа С в строку S вставить S0 - C++
Дан символ С и строки S, S0. После каждого вхождения символа С в строку S вставить S0.

Строка вводится с клавиатуры. В данной строке вставить пробел после каждого символа - C++
Строка вводится с клавиатуры. В данной строке вставить пробел после каждого символа

Строка: После каждого символа А вставить пробел, и подсчитать количество символов B, стоящих между + и - - C++
Помогите пожалуйста решить задачу. После каждого символа А вставить пробел, и подсчитать количество символов B, стоящих между + и - ...

Сформировать новое слово из символов слов массива, стоящих после последнего символа ‘*’ в слове - C++
#include &lt;iostream&gt; #include &lt;string&gt; #include &lt;algorithm&gt; using namespace std; void mas(int n, string *words) { ...


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

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

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