Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   С :запись из одного файла в другой только часть строки (http://forum.oszone.net/showthread.php?t=263933)

alfaw 07-07-2013 22:10 2180884

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

#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 2180937

Цитата:

Цитата alfaw
Код:

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

На первый взгляд, проблема в выполнении fputc(), а затем еще и fputs().
Вы идете по строке до тех пор, пока не найдете вторую вертикальную черту (попутно помещая символы в файл). Находите вторую вертикальную черту, ставите завершающий нуль.. И пихаете "обрезанную" строку в файл, хотя она там уже есть (накопилась из единичных символов, пока Вы вертикальные черточки искали).

Вообще говоря, задача звучит типично. И типичным решением будет использование awk:
Код:

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


Время: 13:33.

Время: 13:33.
© OSzone.net 2001-