×
Create a new article
Write your page title here:
We currently have 3,185 articles on s23. Type your article name above or create one of the articles listed here!



    s23
    3,185Articles

    Difference between revisions of "Concord/dci2csv"

    imported>DrOwl
    (convert DCI rule files to csv files)
     
    imported>DrOwl
    m
    Line 131: Line 131:
       
     
    }</pre>
     
    }</pre>
      +
      +
      +
      +
    [[Category:Concord]]
      +
    [[Category:Networking]]
      +
    [[Category:Computer]]
      +
    [[Category:English]]

    Revision as of 17:09, 22 February 2005

    here is a little script i wrote to change DCI rules foles to csv formated files.


    #!/bin/perl
    
    use strict;
    use warnings;
    use Getopt::Long;
    
    Getopt::Long::config qw(no_ignore_case);
    
    
    my ( $inputFile, $outputAllFields, $searchKey, $outputFields );
    our @foundSegments;
    {
    
      $outputFields = 'name,deviceSpeedIn,deviceSpeedOut';
      
      my $needHelp;
      GetOptions( 	'dciInFile=s' 		=> \$inputFile,
    		'findField=s'		=> \$searchKey,
    		'showFields=s'		=> \$outputFields,
    		'listAllFields'		=> \$outputAllFields,
    		'help|h|H|?|HELP'  	=> \$needHelp
    	);
      die usage() if $needHelp;
    }
    
    ############################################################
    # Data collection
    #  using an input file
    #  else quit
    ############################################################
    
    if ($inputFile){  
    
        findVars($inputFile); 
    } else {
    die usage() 
    } 
    
    
    ############################################################
    # Data output 
    #	if request for keys print all keys
    #	else print results
    ############################################################
    
    if ($outputAllFields) {
      foreach ( @foundSegments ) {
        foreach (keys %$_) {
          print "$_, ";
        }
      print "\n";
      }
    
    } else {
      foreach my $found (@foundSegments) {
        foreach my $showKey (split /,/, $outputFields) {
          print "$found->{$showKey},";	
        }
      print "\n";
      }
    }
    
    
    sub usage {
      return <<USAGETEXT;
    usage: $0 -dciInFile filename  
    	-dciInFile filename  is the dci file you want to scan
    	the following options are also availble
    	[ -findField fieldName ] this is the search key to be used (by default all elements will be returned)
    	[ -showFields field names ] feilds to output (default is name,deviceSpeedIn,deviceSpeedOut)
    	[ -listAllFields ] list avalible fields
    	[ -help] this help text
    USAGETEXT
    }
    
    sub findVars {
    ############################################################
    # find infomation form Concord's dci files
    # usage:
    #  findVars("key to search in","value to search for")
    #
    # output:
    #  an aray of Hashes containing all matched segments and keys
    ############################################################
    
    
    my ($dciFile, $segmentFieldKey, %segment, $segmentFieldValue, %segmentFields, $nullVar);
    my $inElementSection;
    
    # read in dci filename from parent
    
    $dciFile=$_[0] || die qq( FindVars function: Missing dciInfile  value $!);
    
    chomp $dciFile;
    
    open(DCIFILE, "<$dciFile") || die "FindVars function: can not open : $!";
    
    
    foreach my $line (<DCIFILE>) {
      chomp $line;
    
      if ( $line =~ /^FN,Elements,/ ) {
        $line =~ s/FN\,Elements\,//g;
        our $i="0";
        foreach (split(/\,/,$line)) {
          $i++;
          $segmentFields{ $i } = $_;
        }
      next;
    }; 
      if ( $line =~ /^DS,,Elements,/ ) {$inElementSection=1; next;} #marks start of elements
      if ( $line =~ /^DE/ ) {$inElementSection=0; next;} #marks end of elements
      if ($inElementSection==1) {
        our $ii="0";
        foreach (split(/\,/,$line)) {
          if ($_ =~ /^$/) {$segment{$segmentFields{$ii}}="void";}
          $ii++;
          $segment{$segmentFields{$ii}}=$_;
        }
        push @foundSegments,{%segment};
        next;
      }
    }
    close DCIFILE;
    
    return (@foundSegments);      # return to main ruteen
    
    }
    Cookies help us deliver our services. By using our services, you agree to our use of cookies.
    Cookies help us deliver our services. By using our services, you agree to our use of cookies.