PDA

Показать полную графическую версию : С :запись из одного файла в другой только часть строки


alfaw
07-07-2013, 22:10
Здравствуйте.Подскажите пожалуйста:у меня есть исходный файл,в строках которого находится информация о студентах:фио,номер группы,несколько
оценок.фио от номера группы,номер группы от оценок и оценки друг от
друга отделены символом |.В новый файл надо записать только фио и номер
группы,то есть без оценок.В данном коде идея в том,чтобы записывать посимвольно до второй черточки,то есть до второго символа |.Но он просто переписывает в новый весь старый.помогите пожалуйста,замучилась уже с этим заданием.

#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <string.h>
#include "locale.h"
using namespace std;


void main ()
{
setlocale(LC_ALL, "Russian");
system("cls"); // Очистка экрана

char famil2[30];
char imya2[30];
char otchest2[30];
char nomer2[20];
int i ,b=0;
char j=0;
char s[200];
char dob[100];
FILE *t, *nf;
t = fopen("D:\\программирование\\прога\\tenis\\tenis\\student.txt", "rt+");//открываю исходный текстовый файл
if(t == NULL)
{
printf("Ошибка при открытии файла.\n");
system ("pause");
exit(1);
}

nf = fopen ("stud.txt", "wt+");//создаю новый файл для перезаписи в него строк

printf("Введите фамилию имя отчество студента через пробел: ");
gets(dob);

while(feof(t)==NULL)
{
fgets(s,200,t);

while(j=!2)
{
if(s[i]=='|')
{j++;
i++;}
s[i+1]='\0';
fputc(s[i],nf);
}

fputs(s,nf);


break;
}


fclose(t);
fclose(nf);


}

deviance
07-07-2013, 23:40
while(j=!2) { if(s[i]=='|') {j++; i++;} s[i+1]='\0'; fputc(s[i],nf); } fputs(s,nf); »
На первый взгляд, проблема в выполнении fputc(), а затем еще и fputs().
Вы идете по строке до тех пор, пока не найдете вторую вертикальную черту (попутно помещая символы в файл). Находите вторую вертикальную черту, ставите завершающий нуль.. И пихаете "обрезанную" строку в файл, хотя она там уже есть (накопилась из единичных символов, пока Вы вертикальные черточки искали).

Вообще говоря, задача звучит типично. И типичным решением будет использование awk (http://ru.wikipedia.org/wiki/AWK):

awk 'BEGIN {FS="|"}; {print $1, $2}' student.txt




© OSzone.net 2001-2012