Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
9 / 9 / 0
Регистрация: 10.11.2011
Сообщений: 241
1

Считывание файла

26.07.2012, 00:26. Просмотров 944. Ответов 14
Метки нет (Все метки)

ВОбщем при считывании файла стандартными способами
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
   FILE *file = fopen(filename, "r");
   if(file == NULL) {
      return;
   }
 
   buf = (char *) malloc(buflen+1);
   while ((c = getc(file)) != EOF) {
      std::cout << c;
      if(len >= buflen) {
         buflen += BUFINC;
         buf = (char *) realloc(buf, buflen+1);
      }
      buf[len++] = c;
   }
  std::cout << (int)c << (int)EOF;
файл в кодировке ANCII он обрывается и не дойдя до конца, при этом код работает правельно просто на последней итерации цикла c имеет значение -1 как и EOF, если перевести файл в UTF то считывает нормально, как я предпологаю это BOM символы, но не ужеле они имет код -1? Вопрос в том как это обойти? Как скритать файл в кодировке ANCII до конца?

Добавлено через 2 часа 15 минут
Никто не сталкивался?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.07.2012, 00:26
Ответы с готовыми решениями:

Заменить считывание с клавиатуры на считывание из файла
Помогите пожалуйста, ни разу не работал со считыванием из файла поэтому не понимаю как и что...

Считывание файла в массив и запись нового файла
Консоль VS C++. Текстовый файл открывается как бинарный, и считывается по 100 байт в массив - и...

Считывание с файла
#Oblast1 g;ergtr hwtrh rt h trh ert h hry e #Oblast2 oooooooqwe qweeeeeeeeee qweeeeeeeee...

Считывание из файла
Помогите пожалуйста! Почему не работает? Нужно считать из файла в двумерный массив матрицу...

14
606 / 406 / 8
Регистрация: 26.04.2012
Сообщений: 2,069
26.07.2012, 00:41 2
Цитата Сообщение от OrmaJever Посмотреть сообщение
ANCII
может ASCII?
0
5473 / 4868 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
26.07.2012, 04:58 3
Желательно весь код (чтобы понятно было, что такое buf, c, BUFINC, buflen, len) и файл выложить.
Не понимаю, в чём проблема. Вот этот код нормально ANSI считывает:
Код
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
include <iostream>
#include <fstream>
 
int main()
{
setlocale(0,"");
 
const int BUFINC = 1;
int buflen = 0;
int len = 0;
char *buf;
char c;
char *filename = "in.txt";
 
FILE *file = fopen(filename, "r");
   if(file == NULL) 
   {
      return 0;
   }
   
   buf = (char *) malloc(buflen);
   
   while ((c = getc(file)) != EOF) 
    {
       std::cout << c;
       if(len >= buflen) 
       {
          buflen += BUFINC;
          buf = (char *) realloc(buf, buflen);
       }
       buf[len++] = c;
   }
  std::cout <<(int)c << "  " << EOF << std::endl;
 
  system("pause");
  return 0;
 }
После выхода из while в с и должно быть -1.
0
9 / 9 / 0
Регистрация: 10.11.2011
Сообщений: 241
26.07.2012, 22:59  [ТС] 4
Цитата Сообщение от Fatal Error Посмотреть сообщение
может ASCII?
Возможно, но в редакторе написано ANSI

Цитата Сообщение от alsav22 Посмотреть сообщение
Желательно весь код (чтобы понятно было, что такое buf, c, BUFINC, buflen, len) и файл выложить.
buf, c и len, buflen просто обьявлены перед этим как char*, char, int и int, а BUFINC константа со значение 100, но до неё не доходит, изначально памяти достаточно.
Цитата Сообщение от alsav22 Посмотреть сообщение
После выхода из while в с и должно быть -1.
Да, но не когда считало только часть файла и только в одной кодировке.
Цитата Сообщение от alsav22 Посмотреть сообщение
Не понимаю, в чём проблема. Вот этот код нормально ANSI считывает
Увы но нет. Вот пример файла, это php скрипт. http://zalil.ru/33614102
0
5473 / 4868 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
27.07.2012, 02:07 5
Ну, тогда так:
Код
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
#include <iostream>
#include <fstream>
 
int main()
{
setlocale(0,"");
 
int buflen = 0;
char *buf;
char c;
char *filename = "index.php";
 
FILE *file = fopen(filename, "r");
   if(file == NULL) 
   {
      return 0;
   }
   
   fseek(file, 0, SEEK_END);
   buflen = ftell(file);
   fseek(file, 0, SEEK_SET);
 
   buf = (char *) malloc(buflen);
   
   for (int i = 0; i < buflen; i++) 
    {
       c = getc(file);
       std::cout << c;
       buf[i] = c;
   }
  
  system("pause");
  return 0;
 }
1
69 / 63 / 5
Регистрация: 09.06.2012
Сообщений: 291
27.07.2012, 05:53 6
C++
1
2
3
buf = (char *) malloc(buflen);
 
//а как же освобождение ?

Не по теме:

Всем сердцем прошу вас не использовать cout при выводе из файла в консоль ;)

2
alsav22
27.07.2012, 06:04
  #7

Не по теме:

Цитата Сообщение от xADMIRALx Посмотреть сообщение
buf = (char *) malloc(buflen);
//а как же освобождение ?
Не по теме:
Всем сердцем прошу вас не использовать cout при выводе из файла в консоль [Munched]
Спасибо за замечание. ТС, надеюсь, допишет. А в чём проблема с cout ?

0
69 / 63 / 5
Регистрация: 09.06.2012
Сообщений: 291
27.07.2012, 06:11 8
alsav22
Сравните время
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
#include <time.h>
 
int main()
{
 time_t f = clock();
 for (int i = 0;i < 10000;++i)
 printf("%d\n",i);
 printf("%d сек\n",((f - clock()) / CLOCKS_PER_SEC));
  
  return 0;
 
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <time.h>
 
int main()
{
 time_t f = clock();
 for (int i = 0;i < 10000;++i)
 std::cout << i << std::endl;
 std::cout << "sek " << ((clock() - f) / CLOCKS_PER_SEC) << std::endl;
  
  return 0;
 
}
0
alsav22
27.07.2012, 06:21
  #9

Не по теме:

0,5 сек. разница.

0
xADMIRALx
27.07.2012, 06:27
  #10

Не по теме:


попробуйте 50000 в цикле фор
Да и mingw значительнее быстрее выполняет цикл..

0
alsav22
27.07.2012, 06:38
  #11

Не по теме:

Цитата Сообщение от xADMIRALx Посмотреть сообщение

Не по теме:


попробуйте 50000 в цикле фор
Да и mingw значительнее быстрее выполняет цикл..

3 сек. в mingv

0
9 / 9 / 0
Регистрация: 10.11.2011
Сообщений: 241
27.07.2012, 10:21  [ТС] 12
Цитата Сообщение от alsav22 Посмотреть сообщение
Ну, тогда так: Код
спасибо, вечером приду попробую.

Цитата Сообщение от xADMIRALx Посмотреть сообщение
Всем сердцем прошу вас не использовать cout при выводе из файла в консоль
Это только для дебага, в реальной программ iostream я убираю. Да и стандартными
stdin, stdout я пока не знаю как пользоватся
0
5473 / 4868 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
27.07.2012, 10:24 13
Цитата Сообщение от OrmaJever Посмотреть сообщение
Это только для дебага, в реальной программ iostream я убираю
Ну и зря. Это же С++, а не С.
0
86 / 81 / 28
Регистрация: 02.08.2011
Сообщений: 335
27.07.2012, 10:31 14
Ну если C++ то смотри в сторону fstream, ifstream, ofstream.
0
5473 / 4868 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
27.07.2012, 11:44 15
Цитата Сообщение от KATbIK Посмотреть сообщение
Ну если C++ то смотри в сторону fstream, ifstream, ofstream
Если на С++, то тогда так:
Код
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 <iostream>
#include <fstream>
 
using std::cout;
using std::endl;
using std::ifstream;
using std::ios;
 
 
int main()
{
   setlocale(0,"");
 
   char *filename = "index.php";
   ifstream file(filename);
   
   if(!file.is_open()) 
   {
      cout << "Error!" << endl;
      system("pause");
      return 0;
   }
   
   file.seekg(0, ios::end);
   size_t buflen = file.tellg();
   file.seekg(0, ios::beg);
   
   char *buf = new char[buflen];
   
   char c;
   for (size_t i = 0; i < buflen; i++) 
   {
       file.get(c);
       cout << c;
       buf[i] = c;
   }
   
   file.close();
   delete [] buf;
  
   cout << endl;
   system("pause");
   return 0;
 }
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.07.2012, 11:44

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

считывание из файла
привет всем. полазил по форуму но так и не понял как считывать с файла для моей задачи.. как...

Считывание из файла
Допустим, стоит условие: из файла записать данных в массив и потом из этого же файла в переменную....

Считывание из файла
bool Poisk_Street() { ifstream fin; std::string street,fail; cout&lt;&lt;endl&lt;&lt;&quot;Введите улицу для...

Считывание с файла
Здравствуйте. Нужна помощь в написании программы: Дана непустая последовательность слов...


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

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

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