Check for a substring


 
Thread Tools Search this Thread
Top Forums Programming Check for a substring
# 8  
Old 09-27-2010
Perhaps I am not understanding you correctly...

---------- Post updated at 11:57 AM ---------- Previous update was at 11:57 AM ----------

Quote:
Originally Posted by Corona688
I'm not sure what you're saying here. strstr hunts for an instance of one string inside another, precisely what you want. If you want to check for two strings, call it again on the other string, and skip if either match.
Exactly...
# 9  
Old 09-27-2010
Corona688

strstr() would check to see if the substring str1 is part of string str2, as I read in the man pages.
so, to use strstr() you need to know str2.
In my case, str2 is a list of hundreds of files that I loop over one by one.
All I need is to skip the string if it has any of the 2 substrings I mentioned above.

Here is the code:
Code:
#include <string>
#include "TFile.h"
#include <iostream>
#include "TH1.h"
#include "TCanvas.h"
#include <fstream>

void func2()
{
  using std::cin;
  using std::cout;
  using std::endl;

// new data
//TFile *_file_0 = TFile::Open("m-00.root");
TFile *_file_0 = TFile::Open("m-00.root");

// old data
//TFile *_file_1 = TFile::Open("m-00.root");
TFile *_file_1 = TFile::Open("m-00.root");

 char var[20];
 string mystr = "pre_ti_data_";
 string myc = "MyC";

 ifstream myfile;
 myfile.open("vars.txt");
 if (myfile.is_open())
   {
     while (!myfile.eof())
       {
	 myfile >> var;
         string dutt = mystr+var+";1";
         string sun1 = mystr+var+".eps";
         string sun2 = mystr+var+".jpg";
	 cout << "What is dutt? " << dutt << endl;

	 //Pass bdt and nn
	 //
	 //if (dutt == "pre_ti_data_bdt" || dutt == "pre_ti_data_nn")
	 //  continue;  ????
         //

	 //TCanvas *MyC = new TCanvas(dutt.c_str(), "", 1);

	 TH1* h0  = (TH1*) _file_0->Get(dutt.c_str());
	 TH1* h1  = (TH1*) _file_1->Get(dutt.c_str());

	 TH1F* rat_d = (TH1F*) h0->Clone();
	 rat_d->Reset();
	 rat_d->Divide(h0, h1);
	 rat_d->SetMaximum(0.5);
	 rat_d->SetMinimum(0.0);
	 
	 //
	 //*****************************************
	 //this is for fitting the ratios histogram:
	 //*****************************************
	 cout << "Fitting: " << dutt << "ratio" << endl;
	 //rat_d->Fit("pol1");
	 rat_d->Fit("pol0");  //fitting with a constant function
	 gStyle->SetOptFit(111);
	 //
	 
         TCanvas *MyC = new TCanvas(myc.c_str(),"",1);
         MyC->Divide(2,1);
         MyC->cd(1);
         rat_d->Draw();

	 MyC->cd(2);
	 h0->SetLineColor(2);
	 Double_t n0 = h0->Integral();
	 cout << "Number of events in h0: " << n0 << endl;

	 //
	 //To make sure I have no zeros on the denominator
	 if (n0 == 0) {
	   cout << "     >>>>>>>>>>>>>>>>>      " << endl;
	   cout << "  I got a zero in the denominator" << endl;
	   cout << "     >>>>>>>>>>>>>>>>>      " << endl;
	   continue;
	 }
	 //continue after passing the zero:
	 //

	 h0->Scale(1/n0); //h0->Scale(1/h0->Integral())

	 h1->SetLineColor(4);
	 Double_t n1 = h1->Integral();
	 cout << "Number of events in h1: " << n1 << endl;
	 h1->Scale(1/n1);

	 h0->Draw();
	 h1->Draw("same");
         cout << "sun1 : " << sun1 << '\n';
         cout << "sun2 : " << sun2 << '\n';
	 MyC->Print(sun1.c_str());
	 MyC->Print(sun2.c_str());
continue;
       }
     myfile.close();
   }

Please notice that it is not a 100% C++, but this is because the ROOT system has some differences. Yet, all C++ codes work with it.
TFile and other strange words are classes from the framework I use.

~faizlo
# 10  
Old 09-27-2010
You should be able to do:
Code:
if(strstr(dutt, "pre_ti_data_bdt") != NULL || strstr(dutt, "pre_ti_data_nn") != NULL)
  continue;

However, looking at your code, you always concatenate "bdt" or "nn" to "pre_ti_data_", why not just check if(var == bdt || var ==nn"), if so then continue there, rather than doing all the concatentation then the check??[COLOR="#738fbf"]
# 11  
Old 09-27-2010
that's because pre_ti_????? is a name of set of files among other sets.
I am dealing with 1000s of files! that's while I keep losing track of where I am Smilie
# 12  
Old 09-27-2010
Quote:
Originally Posted by faizlo
All I need is to skip the string if it has any of the 2 substrings I mentioned above.
We've told you how to look for either of those two substrings and that's somehow insufficient, so this is an insufficient explanation of the problem.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Check if string contains substring surrounded by numbers

Hi, I have a process that generates strings. I would like to check each string and search for substring which contains the letter 'E' surrounded by numbers (both sides of the letter 'E'). few examples: AA4E7012A2 - contains E surrounded by numbers FE18274012 - does not contain E... (3 Replies)
Discussion started by: yanive
3 Replies

2. Shell Programming and Scripting

Substring check in IF condition in shell script

I want to check if the string has the substring in IF condition then process... i tried below but not working if ]; then ............. field can be "reserved1" ....reservedn / fillspaces1 ... fillspacesn (4 Replies)
Discussion started by: greenworld123
4 Replies

3. Programming

check substring

hi everyone I have a C program where I have a line and I want to check if the line contains a string.The line is stored in a buffer.How can I do that? Can I consider the whole line as a string and check for a substring?And if so what's the most efficient way to achieve it? (1 Reply)
Discussion started by: vlm
1 Replies

4. Shell Programming and Scripting

Get the substring

Hi All, I have a ouput string likes 'u8wos' or 'u10acsd' or somthing else 'u{number}{any characters}'and I want to get the number behind the letter 'u' by bash shell. Thanks Damon (11 Replies)
Discussion started by: Damon_Qu
11 Replies

5. UNIX for Dummies Questions & Answers

Getting Substring

Hi, I hav a string lets say aa.txt:bb:txt length of the string can vary.. I have to keep the token inside a array and the delimiter is : plz send me the code (2 Replies)
Discussion started by: Deekay.p
2 Replies

6. Shell Programming and Scripting

substring

I have a string '<Hi>abc</Hi>" How to print "abc" (6 Replies)
Discussion started by: sandy1028
6 Replies

7. UNIX for Dummies Questions & Answers

Substring

Hi I use the below cmd to get the list of files that are modified than <temp> file in the <path> diretory cmd:find <path> -name '*.zip' -type f -newer <temp> -print i am getting all the list of files that are new or modified, with abs path, i want to copy all of these files to a... (3 Replies)
Discussion started by: Naveen_5960
3 Replies

8. UNIX for Dummies Questions & Answers

Need help with substring

I need to check the occurrence of one string within another. code ******************** if ;then do something done ******************** Thanks (7 Replies)
Discussion started by: w020637
7 Replies

9. Shell Programming and Scripting

how to get substring

i have a strings abc-def.csv ghi-jkl.csv i want to make it as abc-*-def.xyz ghi-*-jkl.xyz How to do it?. (5 Replies)
Discussion started by: senthilk615
5 Replies

10. Shell Programming and Scripting

Getting a substring

This is probably pretty simple butI'm not sure how to best go about it. If I have FILE="myBigLongFileName_1.xls" FILE_PREFIX=`echo $FILE| cut -d"." -f1` # that gives "myBigLongFileName_1" All i want to do now is chop the "_1" from the end of $FILE_PREFIX Any ideas anyone? (3 Replies)
Discussion started by: djkane
3 Replies
Login or Register to Ask a Question