Форум Gatchina OnLine

Форум Gatchina OnLine (https://forumgol.ru/index.php)
-   Программирование и разработка (https://forumgol.ru/forumdisplay.php?f=4)
-   -   Задачки на С++ (https://forumgol.ru/showthread.php?t=4841)

M@GIC 20.03.2007 21:33

Задачки на С++
 
Собственно напсиана программа котрая открывает текстовый файл и счаитывает оттуда текст,выводится на экран. Если найдена цифра от 0-9 то заменяется на её эквивалент в беквенном виде тоесть (0-ноль, 1- один итд)
Собственно написал но заметил один баг то что последний сивол выводится 2 раза. Х3 почему

PHP код:

#include<iostream>
#include<fstream>
#include <conio.h>
using namespace std;
int main()
{
char buffer[1];
ifstream open;
open.open("file.txt");
if (
open.fail())
    {
        
cout<<"Unable to open input file!"<<endl;
        
getch();
        return 
1;
    }
while(!
open.eof())
     {
         
open.read(buffer,sizeof(buffer));
         switch(
buffer[0])
         {
          case 
'0':cout<<"zero";break;
          case 
'1':cout<<"one";break;
          case 
'2':cout<<"two";break;
          case 
'3':cout<<"three";break;
          case 
'4':cout<<"four";break;
          case 
'5':cout<<"five";break;
          case 
'6':cout<<"six";break;
          case 
'7':cout<<"seven";break;
          case 
'8':cout<<"eight";break;
          case 
'9':cout<<"nine";break;
          case 
'.':cout<<"."<<endl;break;
          case 
'\n':break;
          default :
cout<<buffer[0];break;
         }

     }

open.close();
getch();



ΛLIEN 20.03.2007 22:04

Сначала надо бы попытаться считывать, а потом уже проверять на eof, вапсТчета.

PHP код:

....
while(
open.read(buffer,sizeof(buffer)) > && !open.eof())
     {
         switch(
buffer[0]) 
         { 
          case 
'0':cout<<"zero";break; 
          case 
'1':cout<<"one";break; 
          case 
'2':cout<<"two";break; 
          case 
'3':cout<<"three";break; 
          case 
'4':cout<<"four";break; 
          case 
'5':cout<<"five";break; 
          case 
'6':cout<<"six";break; 
          case 
'7':cout<<"seven";break; 
          case 
'8':cout<<"eight";break; 
          case 
'9':cout<<"nine";break; 
          case 
'.':cout<<"."<<endl;break; 
          case 
'\n':break; 
          default :
cout<<buffer[0];break; 
         } 
     } 
... 

Да и вообще "!open.eof()" в данном случае фтопку. =)

Просто
PHP код:

while(open.read(buffer,sizeof(buffer)) > 0


M@GIC 20.03.2007 22:19

2 Alien
 
Спасиб. Теперь корректно всё работает.

kainen 21.03.2007 12:42

Простите за занудство, но этот свитч выглядит как говно :)

M@GIC 28.04.2007 01:56

Ещё вопросик. Имеется текстовый файл.Структура файла следующая
login: password: group
Есть какое то условие удаление строки. Считываем файл по строкам. Условие выполнилось и надо удалить данную строку. Предположим что файловый указатель установлен на начало этой строки. Собсвенно вопрос как удалить???
Зы создание резервного файла и переписи в него всех остальных записей(которые не удовлетовряют условию), с последующей его переименовкой не катит.

Executer 28.04.2007 10:01

А файл большой?
Можно сначала загнать все что надо в массив, а потом записать поверх в этот файл...

M@GIC 28.04.2007 10:54

Цитата:

Сообщение от Executer (Сообщение 207425)
А файл большой?
Можно сначала загнать все что надо в массив, а потом записать поверх в этот файл...

Не катит.

Yago De Malina 28.04.2007 11:17

нужно на c++ обязательно? :)
в ворде проще будет....
только если условие подходящее

kainen 28.04.2007 11:35

Цитата:

Сообщение от M@GIC (Сообщение 207433)
Не катит.

Нет способа в WinAPI каким-либо образом удалить кусок из середины файла. Теоретически, однако, это возможно, но при длине удаляемого куска кратной размеру блока.

Executer 28.04.2007 11:51

Раз неудовлетворяют простые методы, можно посложнее :)
Можно сделать так:
открываем файл. Затем считываем строки, если встретили строку, которую надо удалить - запоминаем это место, далее первую строку, которую не надо удалять помещаем на это место. И обновляем запомненоое место. Вконце изменяем длину файла и сохраняем...


Текущее время: 16:46. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions, Inc. Перевод: zCarot