text: Q:
  
  process multiple lines text file to print in single line
  
  I am newbie in TCL scripting. Just wish to get some advice from experts here. 
  I wish to process the report with format as below. I am thinking to print the report without the header and with just single line like -
  Connections for net 'pmg_ccu_ot2_tam_50mhz_sel_xainfwh' :: Driver a_par/pmg_ccu_ot2_tam_50mhz_sel_xainfwh Output Pin (a_par) :: Load  b_par/pmg_ccu_ot2_tam_50mhz_sel_xainfwh Input Pin (b_par)
  Connections for net 'pmg_ccu_ot2_tam_50mhz_sel_xainfwh_2' :: Driver d_par/pmg_ccu_ot2_tam_50mhz_sel_xainfwh_2 Output Pin (d_par) :: Load  e_par/pmg_ccu_ot2_tam_50mhz_sel_xainfwh_2 Input Pin (e_par), f_par/pmg_ccu_ot2_tam_50mhz_sel_xainfwh_3 Input Pin (f_par)  
  <more . . .>
  
  Really appreciate if anyone can give some light and idea to me. Thanks much!
  ****************************************
  Report : net
          -connections
  Design : soc
  Version: G-2012.06-SP2
  Date   : Sun Apr  7 22:56:33 2013
  ****************************************
  
  Connections for net `pmg_ccu_ot2_tam_50mhz_sel_xainfwh`:
  
  Driver Pins         Type                
  ------------        ----------------    
  a_par/pmg_ccu_ot2_tam_50mhz_sel_xainfwh Output Pin (a_par)
  
  Load Pins           Type                
  ------------        ----------------    
  b_par/pmg_ccu_ot2_tam_50mhz_sel_xainfwh Input Pin (b_par)  
  
  1  
  
  Connections for net `pmg_ccu_ot2_tam_50mhz_sel_xainfwh_2`:
  
  Driver Pins         Type                
  ------------        ----------------    
  d_par/pmg_ccu_ot2_tam_50mhz_sel_xainfwh_2 Output Pin (d_par)
  
  Load Pins           Type                
  ------------        ----------------    
  e_par/pmg_ccu_ot2_tam_50mhz_sel_xainfwh_3 Input Pin (e_par)
  f_par/pmg_ccu_ot2_tam_50mhz_sel_xainfwh_3 Input Pin (f_par)  
  
  1
  
  <more . . .>
  
  A:
  
  If I'm understanding your requirements correctly, I would do something like this:
  Input file contains:
  ****************************************
  Report : net
          -connections
  Design : soc
  Version: G-2012.06-SP2
  Date   : Sun Apr  7 22:56:33 2013
  ****************************************
  
  Connections for net `pmg_ccu_ot2_tam_50mhz_sel_xainfwh`:
  
  Driver Pins         Type                
  ------------        ----------------    
  a_par/pmg_ccu_ot2_tam_50mhz_sel_xainfwh Output Pin (a_par)
  
  Load Pins           Type                
  ------------        ----------------    
  b_par/pmg_ccu_ot2_tam_50mhz_sel_xainfwh Input Pin (b_par)  
  
  1  
  
  Connections for net `pmg_ccu_ot2_tam_50mhz_sel_xainfwh_2`:
  
  Driver Pins         Type                
  ------------        ----------------    
  d_par/pmg_ccu_ot2_tam_50mhz_sel_xainfwh_2 Output Pin (d_par)
  
  Load Pins           Type                
  ------------        ----------------    
  e_par/pmg_ccu_ot2_tam_50mhz_sel_xainfwh_3 Input Pin (e_par)
  f_par/pmg_ccu_ot2_tam_50mhz_sel_xainfwh_3 Input Pin (f_par)  
  
  1
  
  <more . . .>
  
  The script:
  # Read file containing input
  set inputfile [open "inputfile.txt" r]
  # File where output will be written in
  set outputfile [open "outputfile.txt" w]
  
  # $type will contain the Pin Type and $outputline will contain the final
  # line to be written
  set type ""
  set outputline ""
  
  # Read each line in the inputfile
  while {[gets $inputfile line] != -1} {
      # If first word in line is "Connections" execute
      if {[lindex [split $line " "] 0] == "Connections"} {
          # If $outputline not empty while in this if, it means that we have
          # reached a new connection. So print out the current connection
          # after joining all its elements by " :: " and reset the output line.
          if {$outputline != ""} {
              puts $outputfile [join $outputline " :: "]
              set outputline ""
          }
          # Replacing the ` by ' and removing the end ":" and then putting
          # the full thing into $output line as an element of a list
          regsub -all {\`} $line "\'" newline
          set newline [string trimright $newline "\:"]
          lappend outputline $newline
      }
      # If there is "Pins" in the line, this means we have a header. The regexp
      # captures the pin type by looking for any alphanumeric characters before
      # "Pins"
      regexp -- {([\w]+) Pins} $line - type
  
      # If there is " Pin " in the line, it means we are in a row of the
      # different 'Pins' type. Here, we put the while line after removing
      # the extra white spaces into the $outputline list.
      if {[regexp -- { Pin } $line]} {
          lappend outputline "$type [string trim $line]"
      }
  }
  # We reached the end of the document. So, add the last line into the outputfile.
  puts $outputfile [join $outputline " :: "]
  
  # Close the files we opened.
  close $inputfile
  close $outputfile
  
  The output:
  Connections for net 'pmg_ccu_ot2_tam_50mhz_sel_xainfwh' :: Driver a_par/pmg_ccu_ot2_tam_50mhz_sel_xainfwh Output Pin (a_par) :: Load b_par/pmg_ccu_ot2_tam_50mhz_sel_xainfwh Input Pin (b_par)
  Connections for net 'pmg_ccu_ot2_tam_50mhz_sel_xainfwh_2' :: Driver d_par/pmg_ccu_ot2_tam_50mhz_sel_xainfwh_2 Output Pin (d_par) :: Load e_par/pmg_ccu_ot2_tam_50mhz_sel_xainfwh_3 Input Pin (e_par) :: Load f_par/pmg_ccu_ot2_tam_50mhz_sel_xainfwh_3 Input Pin (f_par)
  
  This script will take 'Driver Type' or 'Load Type' in any order they come (and you can add new types as well). Are there any other possible variations in your in your input?
  EDIT: You can change the switch block into this and it will take any type of Pins
  if {[regexp -- {([\w]+) Pins} $line - type]} {
      set counter 0
  }
  
  reEDIT: Added -- to the regexp.
  rereEDIT: Matched edit in question.
  
  