Current location: Hot Scripts Forums » Programming Languages » Perl » [split] Working with text files.


[split] Working with text files.

Reply
  #1 (permalink)  
Old 11-16-07, 07:17 PM
engIntern engIntern is offline
Newbie Coder
 
Join Date: Nov 2007
Posts: 5
Thanks: 0
Thanked 0 Times in 0 Posts
I have a question with regard to parsing in Perl. I am currently an engineering intern and have been given the task of making two text files. One is A and the other is B. The data will be in a column format. I will be programming two EEPROMs (hundreds of each). The idea is to read the data in file A and program the EEPROM using this data (in HEX by the way). The same will be done for EEPROM B using file B.

Does anyone have any ideas as to how to go about it? My background is not software - I am a circuits depth undergrad.

Last edited by engIntern; 11-16-07 at 07:20 PM.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiShare on FacebookShare on Stumble UponShare on Twitter
Reply With Quote
  #2 (permalink)  
Old 11-17-07, 03:41 AM
Nico's Avatar
Nico Nico is offline
Community Leader
 
Join Date: Sep 2005
Location: Spain
Posts: 8,074
Thanks: 11
Thanked 88 Times in 83 Posts
Please create your own threads for your questions.

Thread split.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiShare on FacebookShare on Stumble UponShare on Twitter
Reply With Quote
  #3 (permalink)  
Old 11-17-07, 03:20 PM
curbview.com's Avatar
curbview.com curbview.com is offline
Junior Code Guru
 
Join Date: May 2006
Posts: 555
Thanks: 0
Thanked 0 Times in 0 Posts
Maybe this will help guide you to achieve what you need.

http://www-cdf.lbl.gov/~jmuelmen/amb...firm/eeprom.pl

Perl Code:
  1. #!/usr/bin/perl -w
  2. #
  3. # #############################################################################
  4. #
  5. # $Id: eeprom.pl,v 1.1 2003/10/07 22:46:40 jmuelmen Exp $
  6. #
  7. # Copyright (C) 2002, Arnim Laeuger
  8. #
  9. #  This program is free software; you can redistribute it and/or modify
  10. #  it under the terms of the GNU General Public License as published by
  11. #  the Free Software Foundation; either version 2 of the License, or
  12. #  (at your option) any later version. See also the file COPYING which
  13. #  came with this application.
  14. #
  15. #  This program is distributed in the hope that it will be useful,
  16. #  but WITHOUT ANY WARRANTY; without even the implied warranty of
  17. #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  18. #  GNU General Public License for more details.
  19. #
  20. #  You should have received a copy of the GNU General Public License
  21. #  along with this program; if not, write to the Free Software
  22. #  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  23. #
  24. # #############################################################################
  25. #
  26. # Purpose:
  27. # ========
  28. #
  29. # Talks to the vend_ax.hex firmware on a EZ-USB device to read and write
  30. # the onboard I2C EEPROM.
  31. # The vend_ax.hex file can be found in Cypress' Development Kit.
  32. #
  33. # eeprom.pl -d <usbfs name> -a <address> -l <length> -r -w [-D <data string>] [-i <hex-file>]
  34. #  -d : usbfs device name
  35. #  -a : EEPROM address
  36. #  -l : data length
  37. #  -r : read EEPROM
  38. #  -w : write EEPROM
  39. #  -D : provides data in <data string> for write operation
  40. #       bytes separated by spaces
  41. #  -i : name of a file in intel hex-format for write operation
  42. #
  43. #  The options -r and -w are mutually exclusive.
  44. #  So are the options -D and -i. If none is specified, data is expected
  45. #  from STDIN in ihex-format.
  46. #  In the case that data is read from a file or STDIN, options -a and -l
  47. #  are forbidden.
  48. #
  49.  
  50.  
  51. use strict;
  52.  
  53. use USB;
  54. use Getopt::Std;
  55.  
  56.  
  57. my $verbose = 0;
  58. my %vendor_codes = ('RW_INTERNAL'     => 0xa0,
  59.                     'RW_EEPROM'       => 0xb2,
  60.                     'RW_MEMORY'       => 0xa3,
  61.                     'GET_EEPROM_SIZE' => 0xa5);
  62.  
  63.  
  64. # #############################################################################
  65. # dec_hex_convert($number)
  66. #
  67. # Takes the given number and converts it into the decimal representation if it
  68. # is in hexadecimal representation. Decimals are just propagated.
  69. #
  70. # Input:
  71. #   $number : a decimal or hexadecimal number
  72. # Return value:
  73. #   the decimal equivalent of $number
  74. #
  75. # #############################################################################
  76. sub dec_hex_convert {
  77.     my $number = shift;
  78.  
  79.     return($number =~ /^0x/ ? hex($number) : $number);
  80. }
  81.  
  82.  
  83. # #############################################################################
  84. # get_device($bus, $dev)
  85. #
  86. # Seaches given $bus for device $dev.
  87. #
  88. # Input:
  89. #   $bus : bus number of requested device
  90. #   $dev : device number of requested device
  91. # Return value:
  92. #   the usb_device pointer
  93. #
  94. # #############################################################################
  95. sub get_device {
  96.     my $bus = shift;
  97.     my $dev = shift;
  98.     my ($usb_bus, $usb_device);
  99.     my ($bus_name, $dev_name);
  100.     my %device_desc;
  101.     my $matching_device = 0;
  102.  
  103.  
  104.     $usb_bus = &USB::get_usb_busses();
  105.  
  106.   SCAN_BUS: {
  107.       do {
  108.           $bus_name = &USB::get_usb_busname($usb_bus);
  109.           printf("Scanning bus name = %s\n", $bus_name) if ($verbose);
  110.  
  111.           print("Bus: $bus_name $bus\n") if ($verbose);
  112.           if ($bus_name == $bus) {
  113.  
  114.               if (defined(&USB::get_usb_devices($usb_bus))) {
  115.                   $usb_device = &USB::get_usb_devices($usb_bus);
  116.  
  117.                 SCAN_DEVICE: {
  118.                     do {
  119.                         $dev_name = &USB::get_usb_devicename($usb_device);
  120.                         print("Device: $dev_name $dev\n") if ($verbose);
  121.                         if ($dev_name == $dev) {
  122.  
  123.                             %device_desc = %{ USB::get_usb_device_descriptor($usb_device) };
  124.                             printf("Found device idVendor 0x%04x, idProduct 0x%04x, Class %d\n",
  125.                                    $device_desc{'idVendor'}, $device_desc{'idProduct'},
  126.                                    $device_desc{'bDeviceClass'}) if ($verbose);
  127.  
  128.                             $matching_device = $usb_device;
  129.                             last SCAN_BUS;
  130.                         }
  131.  
  132.                         if (defined(&USB::get_usb_next_device($usb_device))) {
  133.                             $usb_device = &USB::get_usb_next_device($usb_device);
  134.                         } else {
  135.                             last SCAN_DEVICE;
  136.                         }
  137.                     } while (1 == 1);
  138.                 }
  139.               }
  140.           }
  141.  
  142.  
  143.           if (defined(&USB::get_usb_next_bus($usb_bus))) {
  144.               $usb_bus = &USB::get_usb_next_bus($usb_bus);
  145.           } else {
  146.               last SCAN_BUS;
  147.           }
  148.       } while (1 == 1);
  149.   }
  150.  
  151.     return($matching_device);
  152. }
  153.  
  154.  
  155. # #############################################################################
  156. # open_device_by_devfs_filename($devfs_filename)
  157. #
  158. # Opens the usbfs filehandle of the device specified in the parameter.
  159. #
  160. # Input:
  161. #   $devfs_filename : filename of the usbfs device
  162. # Return value:
  163. #   returns the opened file handle
  164. #
  165. # #############################################################################
  166. sub open_device_by_devfs_name {
  167.     my $devfs_name = shift;
  168.     my (@path_elems, $num, $bus, $device);
  169.     my (@this_dev, $result);
  170.  
  171.     # test if the file name is really present and writeable
  172.     if (-w $devfs_name) {
  173.  
  174.         @path_elems = split(/\//, $devfs_name);
  175.         $num = scalar(@path_elems);
  176.  
  177.         $device = $path_elems&#91;$num - 1];
  178.         $bus    = $path_elems&#91;$num - 2];
  179.  
  180.         print("$bus $device\n") if ($verbose);
  181.  
  182.         @this_dev = get_device($bus, $device);
  183.  
  184.         $result = &USB::usb_open($this_dev&#91;0]);
  185.     } else {
  186.         print(STDERR "Can't open $devfs_name for writing!\n");
  187.         undef($result);
  188.     }
  189.  
  190.     return($result);
  191. }
  192.  
  193.  
  194. # #############################################################################
  195. # usb_read_eeprom($device, $address, $length, $data)
  196. #
  197. # Read data at given address from EEPROM.
  198. #
  199. # Input:
  200. #   $device   : file handle for the usbfs device
  201. #   $address  : address of data in EEPROM
  202. #   $length   : length of data
  203. # Output:
  204. #   $data     : this array ref will be filled with the received bytes
  205. # Return value:
  206. #   number of read bytes, -1 on error
  207. #
  208. # #############################################################################
  209. sub usb_read_eeprom {
  210.     my $device  = shift;
  211.     my $address = shift;
  212.     my $length  = shift;
  213.     my $data    = shift;
  214.     my ($rd, $result);
  215.     local *ZERO_FILE;
  216.  
  217.     # 0 = autodetect; 2 = 8 bit address; 3 = 16 bit address
  218.     my $i2c_address_size  = 2;
  219.     # hardwired address part, not relevant during autodetect
  220.     my $i2c_wired_address = 1;
  221.     # pagesize of EEPROM (not relevant for read operation)
  222.     my $i2c_pagesize = 1;
  223.  
  224.     open(ZERO_FILE, "</dev/zero");
  225.     $result = read(ZERO_FILE, $rd, $length);
  226.     close(ZERO_FILE);
  227.  
  228.     if ($result == $length) {
  229.  
  230.         $result = &USB::usb_control_msg($device,    0xc0, $vendor_codes{'RW_EEPROM'},
  231.                                         $address,
  232.                                         ($i2c_wired_address << 4) | $i2c_address_size |
  233.                                         ($i2c_pagesize << 8),
  234.                                         $rd, $length, 1000);
  235.         if ($result > 0) {
  236.             @{$data} = unpack("C$result", $rd);
  237.  
  238.             if ($result != $length) {
  239.                 print(STDERR "Could not read all requested data from the EEPROM.\n");
  240.             }
  241.         } else {
  242.             print(STDERR "Error while reading the EEPROM.\n");
  243.         }
  244.     } else {
  245.         print(STDERR "Could not initialize raw data scalar.\n");
  246.         $result = -1;
  247.     }
  248.  
  249.     return($result);
  250. }
  251.  
  252.  
  253. # #############################################################################
  254. # usb_write_eeprom($device, $address, $length, $data)
  255. #
  256. # Write given data at specified address to EEPROM.
  257. #
  258. # Input:
  259. #   $device   : file handle for the usbfs device
  260. #   $address  : address of data in EEPROM
  261. #   $length   : length of data
  262. #   $data     : reference of array containing the data (bytewise)
  263. # Return value:
  264. #   number of written bytes, -1 on error
  265. #
  266. # #############################################################################
  267. sub usb_write_eeprom {
  268.     my $device  = shift;
  269.     my $address = shift;
  270.     my $length  = shift;
  271.     my $data    = shift;
  272.     my ($rd, $result);
  273.  
  274.     # 0 = autodetect; 2 = 8 bit address; 3 = 16 bit address
  275.     my $i2c_address_size  = 2;
  276.     # hardwired address part, not relevant during autodetect
  277.     my $i2c_wired_address = 1;
  278.     #
  279.     # Some pagesizes taken from their databooks:
  280.     #
  281.     #  27xx00 :  1
  282.     #  27xx01 :  8
  283.     #  27xx16 : 16
  284.     #  27xx32 : 32
  285.     #  27xx64 : 32
  286.     # 27xx128 : 64
  287.     # 27xx256 : 64
  288.     # 27xx515 : 64
  289.     my $i2c_pagesize = 64;
  290.  
  291.     $rd = pack("C$length", @{$data});
  292.  
  293.     $result = &USB::usb_control_msg($device,    0x40, $vendor_codes{'RW_EEPROM'},
  294.                                     $address,
  295.                                     ($i2c_wired_address << 4) | $i2c_address_size |
  296.                                     ($i2c_pagesize << 8),
  297.                                     $rd, $length, 1000);
  298.     if ($result > 0) {
  299.         if ($result != $length) {
  300.             print(STDERR "Could not read all requested data from the EEPROM.\n");
  301.         }
  302.     } else {
  303.         print(STDERR "Error while writing the EEPROM.\n");
  304.     }
  305.  
  306.     return($result);
  307. }
  308.  
  309.  
  310. # #############################################################################
  311. # read_eeprom($device, $address, $length)
  312. #
  313. # Wrapper for usb_read_eeprom(). Read requests are split into smaller
  314. # packages. This allows debugging the firmware if it seems to have problems
  315. # with larger requests.
  316. #
  317. # Input:
  318. #   $device   : file handle for the usbfs device
  319. #   $address  : address of data in EEPROM
  320. #   $length   : length of data
  321. # Return value:
  322. #   number of read bytes, -1 on error
  323. #
  324. # #############################################################################
  325. sub read_eeprom {
  326.     my $device  = shift;
  327.     my $address = shift;
  328.     my $length  = shift;
  329.     my $max_len = 128;
  330.     my (@data, $elem);
  331.     my ($result, $received, $requested);
  332.  
  333.     $received = 0;
  334.     while ($received < $length) {
  335.         $requested = $length - $received >= $max_len ? $max_len : $length - $received;
  336.         $result = usb_read_eeprom($device, $address + $received, $requested, \@data);
  337.         print("Read $result Bytes\n");
  338.  
  339.         if ($result == $requested) {
  340.             $received += $requested;
  341.             foreach $elem (@data) {
  342.                 printf("0x%02x ", $elem);
  343.             }
  344.             print("\n");
  345.         } else {
  346.             $result = -1;
  347.             last;
  348.         }
  349.     }
  350.  
  351.     return($result > 0 ? $received : $result);
  352. }
  353.  
  354.  
  355. # #############################################################################
  356. # usb_write_eeprom($device, $address, $length, $data)
  357. #
  358. # Wrapper for usb_write_eeprom(). Data is split into packets of 32 bytes.
  359. #
  360. # Input:
  361. #   $device   : file handle for the usbfs device
  362. #   $address  : address of data in EEPROM
  363. #   $length   : length of data
  364. #   $data     : reference of array containing the data (bytewise)
  365. # Return value:
  366. #   number of written bytes, -1 on error
  367. #
  368. # #############################################################################
  369. sub write_eeprom {
  370.     my $device  = shift;
  371.     my $address = shift;
  372.     my $length  = shift;
  373.     my $data    = shift;
  374.     my $max_len = 128;
  375.     my ($result, $transmitted, $requested);
  376.     my (@partial_data, $i);
  377.  
  378.     $transmitted = 0;
  379.     while ($transmitted < $length) {
  380.         $requested = $length - $transmitted >= $max_len ? $max_len : $length - $transmitted;
  381.  
  382.         # copy scheduled data in a loop
  383.         # could be reduced to one single statement (using [..]) but the dec/hex
  384.         # conversion is necessary
  385.         for ($i = $transmitted; $i < $transmitted+$requested; $i++) {
  386.             push(@partial_data, dec_hex_convert($data->&#91;$i]));
  387.         }
  388.         $result = usb_write_eeprom($device, $address + $transmitted, $requested, \@partial_data);
  389.  
  390.         if ($result == $requested) {
  391.             $transmitted += $requested;
  392.         } else {
  393.             $result = -1;
  394.             last;
  395.         }
  396.     }
  397.  
  398.     return($result > 0 ? $transmitted : $result);
  399. }
  400.  
  401.  
  402. # #############################################################################
  403. # write_eeprom_from_file($device, FILE)
  404. #
  405. # Reads in all records in FILE and writes them to the EEPROM via
  406. # write_eeprom().
  407. #
  408. # Input:
  409. #   $device   : file handle for the usbfs device
  410. #   FILE      : descriptor of the opened hex-file
  411. # Return value:
  412. #   1 on success, 0 on error
  413. #
  414. # #############################################################################
  415. sub write_eeprom_from_file {
  416.     my $device  = shift;
  417.     my $file_contents = shift;
  418.     my ($len, $address, $value, $checksum);
  419.     my (@records, $record, $data);
  420.     my ($i, $result, $line);
  421.  
  422.     $result = 1;
  423.     foreach $line (@{$file_contents}) {
  424.         if ($line =~ m{^:(..)         # Record length     -> $1
  425.                          (..)         # Load Offset High  -> $2
  426.                          (..)         # Load Offset Low   -> $3
  427.                          00           # Record Type
  428.                          (.+)         # Data              -> $4
  429.                          (..)         # Checksum          -> $5
  430.                          \s*$}x) {
  431.         print($line);
  432.             $len      = hex($1);
  433.             $address  = hex($2) * 256 + hex($3);
  434.             $value    = $4;
  435.             # precalculate checksum from header data
  436.             $checksum = (hex($1) + hex($2) + hex($3) + hex($5)) % 256;
  437.  
  438.             $record = {};
  439.             $record->{'len'}  = $len;
  440.             $record->{'addr'} = $address;
  441.             $record->{'data'} = &#91;];
  442.             push(@records, $record);
  443.             $data = $record->{'data'};
  444.  
  445.             for ($i = 0; $i < $len; $i++) {
  446.                 if ($value =~ /^(..)(.*)$/) {
  447.                     push(@{$data}, hex('0x'.$1));
  448.                     $checksum = ($checksum + hex($1)) % 256;
  449.                     $value    = $2;
  450.                 }
  451.             }
  452.  
  453.             if ($checksum != 0) {
  454.                 print(STDERR "Checksum error in line:\n  $line\n");
  455.                 $result = -1;
  456.                 last;
  457.             }
  458.         }
  459.     }
  460.  
  461.     if ($result > 0) {
  462.         # transfer the records to the EZ-USB device
  463.         foreach $record (@records) {
  464.             $len     = $record->{'len'};
  465.             $address = $record->{'addr'};
  466.             $data    = $record->{'data'};
  467.  
  468.             $result = write_eeprom($device, $address, $len, $data);
  469.             if ($result != $len) {
  470.                 print(STDERR "Could not write $len bytes to EEPROM.\n");
  471.                 $result = -1;
  472.                 last;
  473.             } else {
  474.                 print("Writing $len bytes @ $address\n");
  475.             }
  476.         }
  477.     }
  478.  
  479.     return($result);
  480. }
  481.  
  482.  
  483. sub print_usage {
  484.     print <<EOU;
  485. Usage: $0 -d <usbfs name> -a <address> -l <length> -r -w &#91;-D <data string>] [-i <hex-file>]
  486.   -d : usbfs device name
  487.   -a : EEPROM address
  488.   -l : data length
  489.   -r : read EEPROM
  490.   -w : write EEPROM
  491.   -D : provides data in <data string> for write operation
  492.        bytes separated by spaces
  493.   -i : name of a file in intel hex-format for write operation
  494.  
  495.   The options -r and -w are mutually exclusive.
  496.   So are the options -D and -i. If none is specified, data is expected
  497.   from STDIN in ihex-format.
  498.   In the case that data is read from a file or STDIN, options -a and -l
  499.   are forbidden.
  500.  
  501. EOU
  502. }
  503.  
  504.  
  505. # #############################################################################
  506. # Main Program
  507. # #############################################################################
  508.  
  509. my %options;
  510. my ($device_name, $dev_handle);
  511. my (@data, $elem);
  512. my ($address, $length);
  513. my ($read, $write);
  514. my $ihex_filename = "";
  515. my $read_ihex_file = 0;
  516. my $result;
  517. my @file_contents;
  518.  
  519.  
  520. if (getopts('a:d:l:D:rwi:', \%options)) {
  521.  
  522.     if (exists($options{'d'})) {
  523.         $device_name = $options{'d'};
  524.     } else {
  525.         print_usage();
  526.         exit(1);
  527.     }
  528.  
  529.     if (exists($options{'a'})) {
  530.         $address = dec_hex_convert($options{'a'});
  531.     }
  532.     if (exists($options{'l'})) {
  533.         $length = dec_hex_convert($options{'l'});
  534.     }
  535.  
  536.     $read = $write = 0;
  537.     if (exists($options{'r'}) && ($options{'r'} == 1)) {
  538.         $read  = 1;
  539.     }
  540.     if (exists($options{'w'}) && ($options{'w'} == 1)) {
  541.         $write = 1;
  542.     }
  543.     if (($read == 1) && ($write == 1)) {
  544.         print_usage();
  545.         exit(1);
  546.     }
  547.  
  548.     if (exists($options{'D'})) {
  549.         @data = split(/ /, $options{'D'});
  550.  
  551.         if (!(exists($options{'a'}) && exists($options{'l'}))) {
  552.             print(STDERR "You must specify -a and -l with -D.\n");
  553.             print_usage();
  554.             exit(1);
  555.         }
  556.     }
  557.     if (exists($options{'i'})) {
  558.         $ihex_filename = $options{'i'};
  559.         # also open the file
  560.         -r $ihex_filename or die "Can't open $ihex_filename.\n";
  561.         @file_contents = `cat $ihex_filename`;
  562.         $read_ihex_file = 1;
  563.     }
  564.     if ($write && !(exists($options{'D'}) || exists($options{'i'}))) {
  565.         @file_contents = <STDIN>;
  566.         $read_ihex_file = 1;
  567.     }
  568.  
  569.     if ($read_ihex_file && (exists($options{'l'}) || exists($options{'a'}))) {
  570.         print(STDERR "-l or -a must not be specified when reading an ihex file.\n");
  571.         print_usage();
  572.  
  573.         exit(1);
  574.     }
  575.  
  576.     die "Can't initialize USB subsystem\n" if (defined(&USB::usb_init()));
  577.     die "Can't find busses\n" if (&USB::usb_find_busses() < 0);
  578.     die "Can't find devices\n" if (&USB::usb_find_devices() < 0);
  579.  
  580.  
  581.     $dev_handle = open_device_by_devfs_name($device_name);
  582.     if (defined($dev_handle)) {
  583.  
  584.         if ($read) {
  585.             $result = read_eeprom($dev_handle, $address, $length);
  586.         }
  587.  
  588.         if ($write) {
  589.             if (exists($options{'D'})) {
  590.                 $result = write_eeprom($dev_handle, $address, $length, \@data);
  591.             } else {
  592. #                print("@file_contents");
  593.                 $result = write_eeprom_from_file($dev_handle, \@file_contents);
  594.             }
  595.         }
  596.  
  597.         &USB::usb_close($dev_handle);
  598.     } else {
  599.         print(STDERR "Can't open USB device handle\n");
  600.     }
  601.  
  602. } else {
  603.     print_usage();
  604. }
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiShare on FacebookShare on Stumble UponShare on Twitter
Reply With Quote
  #4 (permalink)  
Old 11-21-07, 05:57 PM
engIntern engIntern is offline
Newbie Coder
 
Join Date: Nov 2007
Posts: 5
Thanks: 0
Thanked 0 Times in 0 Posts
Thank You!

Thank you Curbview.com for the leg up in tackling this task.

engInter
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiShare on FacebookShare on Stumble UponShare on Twitter
Reply With Quote
  #5 (permalink)  
Old 11-21-07, 06:25 PM
engIntern engIntern is offline
Newbie Coder
 
Join Date: Nov 2007
Posts: 5
Thanks: 0
Thanked 0 Times in 0 Posts
I have a question with regard to converting excel files into text files. Specifically, I
have one excel file with two worksheets. Call the first worksheet First and the second worksheet Second. Within each worksheet, I have 100 columns by 700 items in each column. Next, I also have one text file that corresponds to each worksheet within the same excel file.

The idea is to sequentially convert and paste the contents of the first column into the corresponding text file. After the first column has been used up, the next column data set will overwrite the previous held contents in the text file. The data in the columns will be in hex format (i.e., C6, 9C, FB, etc., in column format). One can think of the text file as a temporary buffer.

That is, the first text contents will be those of column A. Then column B. Then column C....Till the last column which for my case is CV.

Is there a method for automating this process without writing macro script or is there no other way around it? Can someone please provide insight please?

Thank you inadvance.

engIntern

Last edited by engIntern; 11-21-07 at 06:31 PM.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiShare on FacebookShare on Stumble UponShare on Twitter
Reply With Quote
  #6 (permalink)  
Old 11-21-07, 10:58 PM
curbview.com's Avatar
curbview.com curbview.com is offline
Junior Code Guru
 
Join Date: May 2006
Posts: 555
Thanks: 0
Thanked 0 Times in 0 Posts
Quote:
Originally Posted by engIntern View Post
...SNIP...
engIntern
Please begin a *new* thread before piggybacking this one. To answer your question, please see this link for help with the questions you asked:
http://search.cpan.org/search?query=excel&mode=all
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiShare on FacebookShare on Stumble UponShare on Twitter
Reply With Quote
Reply

Bookmarks


Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Search script improvement 9999 PHP 14 08-29-06 12:46 AM
Draggable Tables Ares JavaScript 10 08-03-06 07:55 AM
Need Your HelP! Loading Multiple External Text into Multiple Dynamic Text Fields Flash_Boi Flash & ActionScript 2 03-30-06 04:27 PM
CMS using text files. May use Flash as the interface. bchalker Script Requests 0 02-06-04 02:47 PM
picking random entries with a filter... Double selection problem dsumpter PHP 7 11-16-03 08:19 PM


All times are GMT -5. The time now is 06:35 AM.
vBulletin® Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.