Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Считывание и парсинг файла


Автор: woolf24 2.6.2014, 12:52
Доброе время суток
Нужно спарсерить файл,струкрура файла:
D-Date="02.05.2014 16:00:00"&D-NAS-Ident=10.11.81.66:50130&Acct-Status-Type=3&User-Name="ao250_5038202"&Event-Timestamp=1399032000&Acct-Delay-Time=0&NAS-Identifier="RST-E320-1"&Acct-Session-Id="erx TenGigabitEthernet 0/0/0.35042030:3504-2030:0887085679"&NAS-IP-Address=10.11.81.66&Service-Type=2&Framed-Protocol=1&Framed-Compression=0&ERX-Pppoe-Description="pppoe 00:22:b0:eb:d5:57"&Framed-IP....

Вытащить D-Date, User-Name, NAS-IP-Address (Например вывода D-Date="02.05.2014 16:00:00")

Вот что я успел написать, но отказывается искать после 1-го сходства и не дописана структура.Прошу помощи. 

Код

//---------------------------------------------------------------------------
      #include <System.IOUtils.hpp>
#include <vcl.h>
#pragma hdrstop
#include <windows.h>
#include <vcl.h>
#pragma hdrstop
#include <stdio.h>
#include <fstream>
#include "Unit1.h"
#include <iostream>
#include <string>
#include <regex>
#include "Unit4.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm4 *Form4;
//---------------------------------------------------------------------------
__fastcall TForm4::TForm4(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm4::Button1Click(TObject *Sender)
{
if(OpenDialog1->Execute())
{
    String Text = TFile::ReadAllText(OpenDialog1->FileName);
        Memo1->Lines->Add(Text);
            Application->ProcessMessages();
    boost::wregex re(
                 L"D-Date=\"(.*?)\"\&"
                

    boost::wcmatch m;

    if(boost::regex_search(Text.c_str(),m,re))
    {
        for(size_t i=1; i< m.size(); ++i)
            Memo2->Lines->Add( m[i].str().c_str() );
         Application->ProcessMessages();
    }
}

Автор: Romikgy 2.6.2014, 12:57
Цитата(woolf24 @  2.6.2014,  11:52 Найти цитируемый пост)
 D-Date, User-Name, NAS-IP-Address

только это отловить надо ?

Автор: woolf24 2.6.2014, 13:00
Romikgy, Да

Автор: Romikgy 2.6.2014, 15:27
пример файла выложи

Автор: woolf24 3.6.2014, 07:02
Цитата(Romikgy @ 2.6.2014,  15:27)
пример файла выложи

http://yadi.sk/d/vIcYRISURhaGi

Автор: Romikgy 3.6.2014, 10:25
Код

 void split(TStringList* lout, char* str, const char* separator) {
      for(char* tok = strtok(str, separator); tok; tok = strtok(NULL, separator))
          lout->Add(tok);
}

....

    FILE * fi = fopen("test.txt" ,"r");
    char s[2048]={0};
    TStringList * sl=new TStringList();

    while (fgets(s,2000,fi) != NULL)
    {

   split(sl,s,"&");

    ListBox1->Items->Add(sl->Values["D-Date"]+" "+
    sl->Values["User-Name"]+" "+
    sl->Values["NAS-IP-Address"]
    );
    sl->Clear();
    Application->ProcessMessages();
    }

    fclose(fi);
    delete sl;

Автор: woolf24 3.6.2014, 13:34
Цитата(Romikgy @ 3.6.2014,  10:25)
Код

 void split(TStringList* lout, char* str, const char* separator) {
      for(char* tok = strtok(str, separator); tok; tok = strtok(NULL, separator))
          lout->Add(tok);
}

....

    FILE * fi = fopen("test.txt" ,"r");
    char s[2048]={0};
    TStringList * sl=new TStringList();

    while (fgets(s,2000,fi) != NULL)
    {

   split(sl,s,"&");

    ListBox1->Items->Add(sl->Values["D-Date"]+" "+
    sl->Values["User-Name"]+" "+
    sl->Values["NAS-IP-Address"]
    );
    sl->Clear();
    Application->ProcessMessages();
    }

    fclose(fi);
    delete sl;


Автор: Romikgy 3.6.2014, 14:39
никакие ... стандартные stdio.h и все

Автор: woolf24 3.6.2014, 15:19
Цитата(Romikgy @ 3.6.2014,  14:39)
никакие ... стандартные stdio.h и все

Спасибо большое!Жалко что руку не могу пожать *(

Автор: Romikgy 3.6.2014, 15:42
ногу пожми))))... хотя бы свою))))

Автор: xvr 18.6.2014, 14:27
Цитата(woolf24 @  3.6.2014,  15:19 Найти цитируемый пост)
Жалко что руку не могу пожать

За тебя пожмем - не жалко  smile 

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