Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> разбор строки с разделителем 
:(
    Опции темы
wertklop
Дата 17.11.2008, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 12.9.2008

Репутация: нет
Всего: нет



народ, поскажите, есть ли спец функция(как в javascript), которая разбирает строку из файла с разделителем типа "|" на массивы, каждый из которых состоит из слов между разделителями? если нет, то помогите её реализовать.
(есть текстовый файл со строками, строка состоит из слов с разделителем.необходимо разобрать строки и сохранить слова. получится что то вроде небольшой БД.)
подскажите наиболее простой способ реализации
PM MAIL   Вверх
russians
Дата 17.11.2008, 01:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 6.11.2006

Репутация: нет
Всего: нет



wertklop, http://www.codenet.ru/progr/cpp/spru/strtok.php
Вообще www.google.com очень хорошо ищет, да...
PM MAIL   Вверх
wertklop
Дата 17.11.2008, 01:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 12.9.2008

Репутация: нет
Всего: нет



Цитата(russians @ 17.11.2008,  01:32)
wertklop, http://www.codenet.ru/progr/cpp/spru/strtok.php
Вообще www.google.com очень хорошо ищет, да...

громадное спасибо, а есть ли функция, читающая сразу всю строку файла, кроме fgets?

Это сообщение отредактировал(а) wertklop - 17.11.2008, 02:07
PM MAIL   Вверх
wertklop
Дата 17.11.2008, 02:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 12.9.2008

Репутация: нет
Всего: нет



Цитата(wertklop @ 17.11.2008,  01:58)
Цитата(russians @ 17.11.2008,  01:32)
wertklop, http://www.codenet.ru/progr/cpp/spru/strtok.php
Вообще www.google.com очень хорошо ищет, да...

громадное спасибо, а есть ли функция, читающая сразу всю строку файла, кроме fgets?

 smile 

нашёл!!!!!!!!
для тех, кто ещё не знает:
http://www.codenet.ru/progr/cpp/sprd/fscanf.php
PM MAIL   Вверх
Alca
Дата 17.11.2008, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 2
Всего: 50



Код

#include "stdafx.h"
#include "strUtils.h"
#include <vector>
#include <string>

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// The one and only application object

CWinApp theApp;

using namespace std;

template< typename StrT >
int split(const char* str, const char* delim, vector<StrT>& results, bool empties = true)
{
    char* pstr = const_cast<char*>(str);
    char* r = NULL;
    r = strstr(pstr, delim);
    int dlen = strlen(delim);
    while( r != NULL )
    {
        char* cp = new char[(r-pstr)+1];
        memcpy(cp, pstr, (r-pstr));
        cp[(r-pstr)] = '\0';
        if( strlen(cp) > 0 || empties )
        {
            StrT s(cp);
            results.push_back(s);
        }
        delete[] cp;
        pstr = r + dlen;
        r = strstr(pstr, delim);
    }
    if( strlen(pstr) > 0 || empties )
    {
        results.push_back(StrT(pstr));
    }
    return results.size();
}



int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
    if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
    {
        return -1;
    }

    // using CString
    //------------------------------------------
    int i = 0;
    vector<CString> results;
    split("a-b-c--d-e-", "-", results);
    for( i=0; i < results.size(); ++i )
    {
        cout << results[i].GetBuffer(0) << endl;
        results[i].ReleaseBuffer();
    }

    // using std::string
    //------------------------------------------
    vector<string> stdResults;
    split("a-b-c--d-e-", "-", stdResults);
    for( i=0; i < stdResults.size(); ++i )
    {
        cout << stdResults[i].c_str() << endl;
    }

    // using std::string without empties
    //------------------------------------------
    stdResults.clear();
    split("a-b-c--d-e-", "-", stdResults, false);
    for( i=0; i < stdResults.size(); ++i )
    {
        cout << stdResults[i].c_str() << endl;
    }

    return 0;
}



--------------------
PM WWW ICQ Skype Jabber   Вверх
Annihilator
Дата 17.11.2008, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


bytegrinder
**


Профиль
Группа: Участник
Сообщений: 493
Регистрация: 21.11.2006
Где: Омск

Репутация: 1
Всего: 3



Цитата(wertklop @ 17.11.2008,  06:13)
Цитата(wertklop @ 17.11.2008,  01:58)
Цитата(russians @ 17.11.2008,  01:32)
wertklop, http://www.codenet.ru/progr/cpp/spru/strtok.php
Вообще www.google.com очень хорошо ищет, да...

громадное спасибо, а есть ли функция, читающая сразу всю строку файла, кроме fgets?

 smile 

нашёл!!!!!!!!
для тех, кто ещё не знает:
http://www.codenet.ru/progr/cpp/sprd/fscanf.php

А пробелы если попадутся?


--------------------
Если вы не можете сделать хоpошyю пpогpаммy, сделайте, чтобы она по кpайней меpе выглядела хоpошо
PM ICQ   Вверх
destrd
Дата 17.11.2008, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 157
Регистрация: 1.10.2008

Репутация: нет
Всего: 4



Цитата(Annihilator @  17.11.2008,  18:49 Найти цитируемый пост)
А пробелы если попадутся?

Ну и что? Модификатор правильный надо указать.
Например, так можно сделать
Код

fscanf(f, "%[^\n]", str);

--------------------
Some people, when confronted with a problem, think, "I known, I'll use regular expressions." Now they have two problems.        -- Jamie Zawinski in comp.lang.emacs
PM MAIL ICQ   Вверх
SABROG
Дата 18.11.2008, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 1
Всего: 91



Сегодня пол дня ковырялся, так и не понял, почему первая строчка из файла считывается, а следующие за ней нет. Строки разделены через \n. В идеале хотелось бы создать все-таки бинарник (т.е. числа в двоичном представлении, а не текстовом), но походу в c++ нет шаблонов для бинарных данных как fscanf.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
wertklop
Дата 19.11.2008, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 12.9.2008

Репутация: нет
Всего: нет



Цитата(SABROG @ 18.11.2008,  21:47)
Сегодня пол дня ковырялся, так и не понял, почему первая строчка из файла считывается, а следующие за ней нет. Строки разделены через \n. В идеале хотелось бы создать все-таки бинарник (т.е. числа в двоичном представлении, а не текстовом), но походу в c++ нет шаблонов для бинарных данных как fscanf.

ды даже если и нет такого в с++, есть же конвертация типов!

вопрос конечно будет другой, в эффективности и быстродействии каждой конвертации...........
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0576 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.