Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Чтение из файла


Автор: crank777 16.12.2006, 22:24
народ кто поможет с таким вопросом.
Как мне сделать такую штуку: мне нужно прочитать из файла 9-ть символов, дальше мне 
надо просто перейдти на один символ вперёд и прочитать ещё 9-ть символов
и перейти на начало следующей строки. сос следующеёй строкой сделать тоже самое
и так далие пока не конец файла.
подскажите хотябы примерный алгоритм и какими функциями лучше работать с файлом.

Автор: Xenon 16.12.2006, 22:57
Ну шагать по файлу можно при помощи file.seekg() А вообще давай наброски, если что-то есть. Если нет - в центр помощи.

Автор: crank777 17.12.2006, 01:45
ну особых набросков нету. а вот пытался сделать это при помощи ф-ии fread(); - но чёт неочень, слишком много лишнего получается на выходе...

Автор: apook 17.12.2006, 02:04
fread читает всюстроку Тебе нужен fgetc;

Автор: crank777 17.12.2006, 02:14
панял, и делать цикл на то количество повторень сколько мне надосимволов

Автор: Rockie 17.12.2006, 05:05
Цитата(crank777 @  17.12.2006,  02:14 Найти цитируемый пост)
 повторень

хорошо слово рифмуется smile

Код
#include<stdio>

int main()
{
  char wordOne[10],wordTwo[10];
  int num;

  // создаем указатель на файл и открываем поток на чтение
  FILE* fp = fopen("myfile.txt","r");
  if(fp==NULL)            // если файла нет
   { printf("Error, no file");
     return 0;
   }
   // пока можно читать из файла
   while(fscanf(fp,"%s %d %s",&wordOne,&num,&wordTwo)!=EOF)
   // будем выводить на экран
     printf("%s %d %s\n",wordOne,num,wordTwo);

 char c = getchar();
 return 0;
}



Автор: Rickert 17.12.2006, 08:09
fread()
fseek()

Автор: GIK 17.12.2006, 10:35
Код

#include<stdio>
#include<iostream>
using namespace std;
int main()
{
  char charik[128]; //длину сам задаш, под свои нужды
  
  FILE* fp = fopen("myfile.txt","r"); //поток открывает файл для чтению, не вздумай записывать че нибудь :))))
  if(fp==NULL)            // если обломилиь
   { printf("HerVam");
     return 1;
   }   
 for(var i=0; i<81; i++){
  if((i+1)%9==0) continue ; //пропускаем каждый девятый символ
  charik[i]=fgetc(fp); //забиваем массив
 }

 for(var i=0; i<(81-9); i++){
 cout<<charik[i]<<endl;
 }
 char c = getchar();
 return 0;
}



Автор: witex 17.12.2006, 13:03
Так я думаю удобнее будет!
Код

#include <stdio.h>
#include <iostream.h>
void main()
{
FILE *fl;
fl=fopen("myfile.txt","r");
char a[10];
while(!feof(fl))
{
   fread(a,1,9,fl);//ili fread(a,9,1,fl);
   fseek(fl,1,SEEK_CUR);
   cout << a << endl;
}

}

З.Ы. Если есть ошибки, не бейте. Не проверял!

Автор: Anikmar 17.12.2006, 13:10
Этот код не будет начинать все заново со следующей строки как требуется в задании

Автор: witex 17.12.2006, 13:15
ну всё зависит в каком формате файл!

Автор: Anikmar 17.12.2006, 13:21
Ну, если мои телепатические способности не подводят - то фидимо файл из строк, в каждой из которых нужно считать куски по 9 симовлов и так до конца строки... Видимо где-то так (если автор темы, не обяснит подробнее).

Я не понял, например, куда девать эти 9 символов? Записывать в массив строк или формировать одну строку?
Лично я бы, наверное сяитывал по строчно, а из строки выдергивал уже нужные куски, хотя можно и напрямую из файла. Хотя файл может быть и не текстовым. 

Автора! Автора!  smile 

Автор: witex 17.12.2006, 13:26
да не понятно,  мож там в строке только 20символов, 9 читаем, 1 промежуточный типо пробела, опять читаем 9 символов, и символ новой строки.

Anikmar а на счёт того что взять всю строку, и потом с нейработать... то всяко удобнее!


Автор: Oleg_Ci 17.12.2006, 13:45
Строка формата грамотная для fscanf нужна smile 
Я изобрёл, только правильная она или нет я точно незнаю, но работает (на MS2003).
-> fscanf(... "%10c%9c%*[^\n]%*[\n]" ... );
Код

#include <stdio.h>

int main(int argc, char *argv[])
{
    FILE * file = fopen("text.txt", "r");
    if( !file ) return 1;

    char c1[10], c2[10]; // массив для 9 символов

    while( fscanf( file, "%10c%9c%*[^\n]%*[\n]", c1, c2 ) > 0 ){
        c1[9] = c2[9] = '\0';
        printf("%s\n%s\n\n", c1, c2 );
    }

    getchar();
    return 0;
}

Автор: witex 17.12.2006, 13:53
Интересная вариация... заитерисовало даже очень!
Работает и на VC6.
Надо по лудше будет разобраться в форматах....
А то сам постоянно, cin, cout использую...
тумаю автору самая тема будет эта прога!

Автор: Anikmar 17.12.2006, 14:45
Если количество блоков по 9 известно - то самое то, а вот если нет - то я не уверен что сработает.
В строке формата прописывается точное количество аргументов. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)