Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.03.2011, 23:36   #1
erro
Пользователь
 
Регистрация: 14.11.2010
Сообщений: 11
По умолчанию Считать строчку из файла

Текстовый файл вида:
String 1 ==== String 2 ==== String 3 ==== int ==== float
....

Как все это добро считать в структуру. Fscanf не подойдет, т.к. там строки.
erro вне форума Ответить с цитированием
Старый 07.03.2011, 23:56   #2
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию

не знаю точно как на си++, но на дельфи будет blockread. на с++ скорее всего аналог readfile, а каждая строка заканчивается символом #0 следовательно читать надо до него.
"Тебе то может на меня и насрать, но твои глаза меня обожают!"
ImmortalAlexSan вне форума Ответить с цитированием
Старый 08.03.2011, 00:13   #3
erro
Пользователь
 
Регистрация: 14.11.2010
Сообщений: 11
По умолчанию

Нужно считать string 1 в 1 элемент стр. string 2 во 2 и т.д. , т.е всего 5 элементов по отдельности, а не всю строку
erro вне форума Ответить с цитированием
Старый 08.03.2011, 00:15   #4
kaljan775
:D
Форумчанин
 
Аватар для kaljan775
 
Регистрация: 26.09.2010
Сообщений: 570
По умолчанию

==== - это типа реальные знаки или это переход на новую строку? или пробелы?
Код:
string text;//пример если все одной строкой
getline(input,text);//
int q=text.find('=');
while(q>=0){
    text.erase(q,4);
    q=text.find('=');
}
stringstream ss;
ss.str(text);
ss>>s.string1>>s.string2>>s.string3>>s.a>>s.b;
а если они разделены пробелами -
Код:
int g=0;
while(!input.eof()){
    input>>s.string1>>s.string2>>s.string3>>s.a>>s.b;
    cout<<s.string1<<s.string2<<s.string3<<s.a<<s.b<<endl;
}
Пишу ПО, создаю сайты, делаю курсовые работы, за деньги
C#, .NET, MS SQL, AngularJS, HTML, jQuery
kaljan775 вне форума Ответить с цитированием
Старый 08.03.2011, 00:22   #5
erro
Пользователь
 
Регистрация: 14.11.2010
Сообщений: 11
По умолчанию

==== - реальные знаки, через fstream все выглядит очень просто), но разве можно просто так input строку (содержащию пробелы)? А через stdio (fopen) можно такое сделать?
erro вне форума Ответить с цитированием
Старый 08.03.2011, 00:38   #6
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

предлагаю читать строку gets-ом, затем обработать её, например strtok-ом
onewho вне форума Ответить с цитированием
Старый 08.03.2011, 00:51   #7
kaljan775
:D
Форумчанин
 
Аватар для kaljan775
 
Регистрация: 26.09.2010
Сообщений: 570
По умолчанию

getline читает до того символа, который укажешь последним параметром, что для массива символов, что для string
input.getline(text,sizeof(text),'\n ');//для массива символов
getline(cin,text,'\n');//для string, длина ограничена(по идее) только свободной памятью

еще можете с помощью специальных функций проскакивать эти ==== и читать следующий элемент
Код:
input>>s.string1;
streampos pos=input.tellp();
input.seekg (pos+4);
input>>s.string2;
pos=input.tellp();
input.seekg (pos+4);
кажись, так
Пишу ПО, создаю сайты, делаю курсовые работы, за деньги
C#, .NET, MS SQL, AngularJS, HTML, jQuery

Последний раз редактировалось kaljan775; 08.03.2011 в 00:56.
kaljan775 вне форума Ответить с цитированием
Старый 08.03.2011, 03:21   #8
erro
Пользователь
 
Регистрация: 14.11.2010
Сообщений: 11
По умолчанию

Цитата:
Сообщение от onewho Посмотреть сообщение
предлагаю читать строку gets-ом, затем обработать её, например strtok-ом
так и сделал , здорово получилось. Но вот как раскидать по элементам структуры не используя switch я не придумал. Может кто-то подскажет как оптимальней?
Код:
#include <stdio.h>
#include <string.h>
#include <windows.h>
struct
{
    char s1[33];
    char s2[33];
    char s3[33];
    int  n;
}test[10];
int main ()
{
  int i=0;
  char str[] ="string 1====string 2====string 3====2";
  char * pch;
  printf ("%s\n",str);
  pch = strtok (str,"=");
  while (pch != NULL)
  {
      {
        switch(i)
        {
            case 0: strcpy(test[1].s1,pch); break;
            case 1: strcpy(test[1].s2,pch); break;
            case 2: strcpy(test[1].s3,pch); break;
            case 3: test[1].n = atoi(pch); break; // from *char to int
        }
        pch = strtok (NULL, "=");
            i++;
    }
  }
   printf ("\n%s----%s----%s----%d\n",test[1].s1,test[1].s2,test[1].s3,test[1].n);
  return 0;
}
erro вне форума Ответить с цитированием
Старый 08.03.2011, 11:27   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А если парсить без особого выпендрежа:
Код:
 char s[]="String 1 ==== String 2 ==== String 3 ==== int ==== float";
 char s1[20][20];
 int k=0,e=0;bool b=true;
 for(int i=0;s[i];i++){
	 if(s[i]=='='){b=false; continue;}
	 if(!b){ k++;b=true; e=0;}
	 s1[k][e++]=s[i];s1[k][e]=0;
 }
 for(int i=0;i<=k;i++) printf("%s\n",s1[i]);
 getchar();
Но строку считывать как обычно?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.03.2011, 14:18   #10
erro
Пользователь
 
Регистрация: 14.11.2010
Сообщений: 11
По умолчанию

Цитата:
Код:
 s1[k][e++]=s[i];
s1[k][e]=0;
Не пойму как это работает, по идее после каждой итерации предыдущий символ заменяется нулем, как же оно всю строку выводит в конце? Я представляю изменение массива вот так :
Код:
s1[k][e] = {
    "0","S","0","0"...
    "0","0","0"...
s1[k][e] = {
    "0","0","t","0"...
    "0","0","0"...
s1[k][e] = {
    "0","0","0","r"...
    "0","0","0"...
erro вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
считать массив чисел из файла Razza Общие вопросы C/C++ 5 13.12.2010 22:10
считать строку из файла Farrel Общие вопросы C/C++ 1 09.12.2010 01:47
Экспорт в последнюю строчку файла .txt leroy87 Microsoft Office Excel 10 23.08.2010 15:19
Вытащить строчку из файла Pedro Общие вопросы Delphi 41 07.01.2009 16:27
считать поочередно каждую строчку и записать в батовский файл elplado Паскаль, Turbo Pascal, PascalABC.NET 3 16.11.2008 17:29