Attachment 'TArtCSVParameter.cc'
Download#include <stdio.h>
#include <iostream>
#include <sstream>
#include <fstream>
#include <string>
#include <TString.h>
#include "TArtCore.hh"
#include "TArtCSVParameter.hh"
using namespace std;
//___________________________________________________________________________
TArtCSVParameter::TArtCSVParameter(){
fDoc = xmlNewDoc((xmlChar*)"1.0"); //1.0 is XML version
fRootNode = xmlNewNode(NULL,(xmlChar*)"dataroot");
xmlDocSetRootElement(fDoc,fRootNode);
ftRootNode = new TXMLNode(fRootNode); // for ROOT XML
}
//___________________________________________________________________________
TArtCSVParameter::~TArtCSVParameter(){
xmlFreeDoc(fDoc); // free the document
xmlCleanupParser();// free the global variables that may have been allocated by the parser
xmlMemoryDump(); // this is to debug memory for regression tests
}
//___________________________________________________________________________
void TArtCSVParameter::LoadParameterList(const char *filename){
ifstream fs(filename);
if ( fs.fail() ){
TArtCore::Error(__FILE__,"Cannot open %s", filename);
return;
}
string line;
Int_t iline=0;
while(getline(fs,line,'\n')){
/* Skip space line */
TString tsline=line;
tsline=tsline.Strip(TString::kBoth);
if (tsline.IsNull()) {iline++;continue;}
// skip comment line
if (tsline.First("//")==0) {iline++;continue;}
istringstream ss(line);string s;
int ncol=0;
vector<TString> v_str(2);
while (getline(ss,s,',')){
TString tsline = s;
tsline=tsline.Strip(TString::kBoth);
if (ncol>=2) {
TArtCore::Error(__FILE__,"Too much Column at %d in %s",
iline+1, filename);
break;
}
v_str[ncol] = tsline;
++ncol;
}
LoadParameter(v_str[0].Data(),v_str[1].Data());
iline++;
}
fs.close();
}
//___________________________________________________________________________
void TArtCSVParameter::LoadParameter(const char *NodeName, const char *csvfile){
ifstream fs(csvfile);
if ( fs.fail() ){
TArtCore::Error(__FILE__,"Cannot open %s", csvfile);
return;
}
vector<TString> str_line0;
string line;
int iline=0;
while(getline(fs,line,'\n')){
/* Skip space line */
TString tsline=line;
tsline=tsline.Strip(TString::kBoth);
if (tsline.IsNull()) {iline++;continue;}
// skip comment line
if (tsline.First("//")==0) {iline++;continue;}
//--------------------------------------
/* Scan one line */
int i=0;
bool IDExist=false;
xmlNodePtr Node;
istringstream ss(line);string s;
while (getline(ss,s,',')){
TString ts=s;
ts=ts.Strip(TString::kBoth);
//--------------------------------------
if (iline==0) { // first line : Node Names
if (ts.IsNull())
TArtCore::Warning(__FILE__,"Empty column at the first line in %s", csvfile);
str_line0.push_back(ts); // store Node names
//--------------------------------------
}else{ // 2nd. line- : Node Contents
if (ts.IsNull()){++i; continue;}// skip space column
if (i>=(int)str_line0.size()){
TArtCore::Warning(__FILE__,
"Too much column at line %d in %s",iline+1,csvfile);
continue;}
//--------------------------------------
if ("ID"==str_line0[i]) { // ID column
Node = FindSameIDNode(NodeName, "ID",ts.Data());
if (0==Node) { // ID is not found, create new Node
Node = xmlNewNode(NULL,(xmlChar*)NodeName);
xmlNewChild(Node,NULL,(xmlChar*)str_line0[i].Data(),(xmlChar*)ts.Data());
xmlAddChild(fRootNode,Node);
}else IDExist=true; // ID has already existed
//--------------------------------------
}else{ // column is not for ID
if (IDExist){
xmlNodePtr NodeMatch = FindNode(Node,str_line0[i].Data());
if (NodeMatch==0)
xmlNewChild(Node,NULL,(xmlChar*)str_line0[i].Data(),(xmlChar*)ts.Data());
else
xmlNodeSetContent(NodeMatch,(xmlChar*)ts.Data()); // update the content
}else // Chlid Node is added when ID does not exist
xmlNewChild(Node,NULL,(xmlChar*)str_line0[i].Data(),(xmlChar*)ts.Data());
}
}
++i; //increment of column number
}
++iline;//increment of line number
}
fs.close();
}
//___________________________________________________________________________
xmlNodePtr TArtCSVParameter::FindNode(xmlNodePtr NodePare, const char *NodeName){
xmlNodePtr node_child = NodePare->children;
while (node_child!=NULL){
if (strcmp(NodeName,(char*)node_child->name)==0) return node_child;
node_child = node_child->next;
}
return 0;
}
//___________________________________________________________________________
xmlNodePtr TArtCSVParameter::FindSameIDNode(const char *NodeName, const char *NodeContent){
xmlNodePtr NodePare = fRootNode->children;
while(NodePare!=NULL){
xmlNodePtr node_child = NodePare->children;
while (node_child!=NULL){
if (strcmp(NodeName,(char*)node_child->name)!=0) {
node_child=node_child->next;
continue;
}
if (strcmp(NodeContent,(char*)xmlNodeGetContent(node_child))==0)
return NodePare;
node_child = node_child->next;
}
NodePare = NodePare->next;
}
return 0;
}
//___________________________________________________________________________
// for test
xmlNodePtr TArtCSVParameter::FindSameIDNode(const char *PareNodeName,
const char *NodeName, const char *NodeContent){
xmlNodePtr NodePare = fRootNode->children;//SAMURAIPla, etc...
while(NodePare!=NULL){
xmlNodePtr node_child = NodePare->children;// ID, Layer, etc...
if (strcmp((char*)NodePare->name,PareNodeName)!=0) {
NodePare = NodePare->next;
continue;
}
while (node_child!=NULL){
if (strcmp(NodeName,(char*)node_child->name)!=0) {
node_child=node_child->next;
continue;
}
if (strcmp(NodeContent,(char*)xmlNodeGetContent(node_child))==0)
return NodePare;
node_child = node_child->next;
}
NodePare = NodePare->next;
}
return 0;
}
//___________________________________________________________________________
void TArtCSVParameter::Write(const char *xmlfile){
//output for check
xmlSaveFormatFileEnc(xmlfile, fDoc, "UTF-8", 1); // output to file
}
//___________________________________________________________________________
Attached Files
To refer to attachments on a page, use attachment:filename, as shown below in the list of files. Do NOT use the URL of the [get] link, since this is subject to change and can break easily.- [get | view] (2012-10-17 06:59:08, 278.1 KB) [[attachment:ANAROOT講習会資料.pdf]]
- [get | view] (2013-06-25 06:26:53, 0.5 KB) [[attachment:CounterExample.cc]]
- [get | view] (2012-10-17 06:53:24, 1.6 KB) [[attachment:MakePlaHist.C]]
- [get | view] (2012-08-20 06:37:41, 6.2 KB) [[attachment:TArtCSVParameter.cc]]
- [get | view] (2012-08-20 06:37:53, 1.0 KB) [[attachment:TArtCSVParameter.hh]]
- [get | view] (2013-06-25 06:26:20, 5.3 KB) [[attachment:TArtCounter.cc]]
- [get | view] (2013-06-25 06:26:40, 1.2 KB) [[attachment:TArtCounter.hh]]
- [get | view] (2012-11-29 12:05:55, 4.8 KB) [[attachment:TArtParameters.cc]]
- [get | view] (2012-11-29 12:05:35, 1.0 KB) [[attachment:TArtParameters.hh]]
- [get | view] (2012-12-04 15:34:16, 6.3 KB) [[attachment:TArtUserParameters.cc]]
- [get | view] (2012-12-04 15:34:00, 1.6 KB) [[attachment:TArtUserParameters.hh]]
- [get | view] (2012-12-04 15:34:38, 1.6 KB) [[attachment:UserParameters.xml]]
- [get | view] (2012-04-19 08:38:22, 3.0 KB) [[attachment:ana-mode.el]]
- [get | view] (2012-04-20 03:38:36, 2.7 KB) [[attachment:anaroot_filter.ver1.00.jar]]
- [get | view] (2012-06-04 04:07:52, 2.6 KB) [[attachment:anaroot_filter.ver1.01.jar]]
- [get | view] (2012-06-01 17:27:17, 4.7 KB) [[attachment:calc2xml.v2.xsl]]
- [get | view] (2012-04-20 03:33:51, 6.3 KB) [[attachment:calc2xml.xsl]]
- [get | view] (2012-10-17 07:32:11, 1.0 KB) [[attachment:install-example.txt]]
- [get | view] (2012-11-29 12:06:11, 1.0 KB) [[attachment:parameters.xml]]
- [get | view] (2012-04-20 03:33:17, 3.1 KB) [[attachment:xml2calc.xsl]]
You are not allowed to attach a file to this page.