The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

Name

Data::Table::Text - Write data in tabular text format

Synopsis

 use Data::Table::Text;

 say STDERR formatTable([
   [".", "aa", "bb", "cc"],
   [1, "A", "B", "C"],
   [2, "AA", "BB", "CC"],
   [3, "AAA", "BBB", "CCC"],
   [4, 1, 22, 333]]);

 #    .  aa   bb   cc
 # 1  1  A    B    C
 # 2  2  AA   BB   CC
 # 3  3  AAA  BBB  CCC
 # 4  4    1   22  333


 say STDERR formatTable([
   { aa => "A", bb => "B", cc => "C" },
   { aa => "AA", bb => "BB", cc => "CC" },
   { aa => "AAA", bb => "BBB", cc => "CCC" },
   { aa => 1, bb => 22, cc => 333 }]);

 #    aa   bb   cc
 # 1  A    B    C
 # 2  AA   BB   CC
 # 3  AAA  BBB  CCC
 # 4    1   22  333


 say STDERR formatTable({
   "" => ["aa", "bb", "cc"],
   "1" => ["A", "B", "C"],
   "22" => ["AA", "BB", "CC"],
   "333" => ["AAA", "BBB", "CCC"],
   "4444" => [1, 22, 333]});

 #       aa   bb   cc
 #    1  A    B    C
 #   22  AA   BB   CC
 #  333  AAA  BBB  CCC
 # 4444    1   22  333


 say STDERR formatTable({
   a => { aa => "A", bb => "B", cc => "C" },
   aa => { aa => "AA", bb => "BB", cc => "CC" },
   aaa => { aa => "AAA", bb => "BBB", cc => "CCC" },
   aaaa => { aa => 1, bb => 22, cc => 333 }});
 #       aa   bb   cc
 # a     A    B    C
 # aa    AA   BB   CC
 # aaa   AAA  BBB  CCC
 # aaaa    1   22  333


 say STDERR formatTable(["a", "bb", "ccc", 4444]);
 # 0  a
 # 1  bb
 # 2  ccc
 # 3  4444


 say STDERR formatTable({ aa => "A", bb => "B", cc => "C" });
 # aa  A
 # bb  B
 # cc  C

Description

Time stamps

Date and timestamps as used in logs of long running commands

dateTimeStamp

Year-monthNumber-day at hours:minute:seconds

dateStamp

Year-monthName-day

timeStamp

hours:minute:seconds

xxx

Execute a command checking and logging the results

  1  @cmd  Command to execute specified as one or more strings with optionally the last string being a regular expression that is used to confirm that the command executed successfully and thus that it is safe to suppress the command output as uninteresting.

Files and paths

Operations on files and paths

Statistics

Information about each file

fileSize

Get the size of a file

  1  $file  File name

fileModTime

Get the modified time of a file in seconds since the epoch

  1  $file  File name

fileOutOfDate

Returns undef if all the files exist and the first file is younger than all the following files; else returns the first file that does not exist or is younger than the first file.

  1  $target   Target
  2  @sources  Sources

Example:

   make($target) if fileOutOfDate($target, $source1, $source2, $source3)

Use fileOutOfDateX() to execute fileOutOfDate and die 'fileOutOfDate' instead of returning undef

Components

Create file names from file name components

filePath

Create a file path from an array of file name components. If all the components are blank then a blank file name is returned

  1  @file  File components

filePathDir

Directory from an array of file name components. If all the components are blank then a blank file name is returned

  1  @file  File components

filePathExt

File name from file name components and extension

  1  @File  File components and extension

quoteFile

Quote a file name

  1  $file  File name

currentDirectory

Get the current working directory

currentDirectoryAbove

The path to the folder above the current working folder

parseFileName

Parse a file name into (path, name, extension)

  1  $file  File name to parse

containingFolder

Path to the folder that contains this file, or use "parseFileName"

  1  $file  File name

Find

Find files and folders below a folder

findFiles

Find all the file under a folder

  1  $dir  Folder to start the search with

findDirs

Find all the folders under a folder

  1  $dir  Folder to start the search with

fileList

File list

  1  $pattern  Search pattern

searchDirectoryTreesForMatchingFiles

Search the specified directory trees for files that match the specified extensions - the argument list should include at least one folder and one extension to be useful

  1  @foldersandExtensions  Mixture of folder names and extensions

Read and write files

Read and write strings from and to files creating paths as needed

readFile

Read a file containing unicode

  1  $file  Name of unicode file to read

readBinaryFile

Read binary file - a file whose contents are not to be interpreted as unicode

  1  $file  File to read

makePath

Make a path for a file name or a folder

  1  $path  Path

writeFile

Write a unicode string to a file after creating a path to the file if necessary

  1  $file    File to write to
  2  $string  Unicode string to write

appendFile

Append a unicode string to a file after creating a path to the file if necessary

  1  $file    File to append to
  2  $string  Unicode string to append

writeBinaryFile

Write a non unicode string to a file in after creating a path to the file if necessary

  1  $file    File to write to
  2  $string  Non unicode string to write

Images

Image operations

imageSize

Return (width, height) of an image obtained via imagemagick

  1  $image  File containing image

convertImageToJpx

Convert an image to jpx format

  1  $source  Source file
  2  $target  Target folder (as multiple files will be created)
  3  $size    Size of each tile

Powers

Integer powers of two

powerOfTwo

Test whether a number is a power of two, return the power if it is else undef

  1  $n  Number to check

Use powerOfTwoX() to execute powerOfTwo and die 'powerOfTwo' instead of returning undef

containingPowerOfTwo

Find log two of the lowest power of two greater than or equal to a number

  1  $n  Number to check

Use containingPowerOfTwoX() to execute containingPowerOfTwo and die 'containingPowerOfTwo' instead of returning undef

Format

Format data structures as tables

formatTableBasic

Tabularize text - basic version

  1  $data       Data to be formatted
  2  $separator  Optional line separator

formatTable

Format various data structures

  1  $data       Data to be formatted
  2  $title      Optional title
  3  $separator  Optional line separator

keyCount

Count keys down to the specified level

  1  $maxDepth  Maximum depth to count to
  2  $ref       Reference to an array or a hash

Lines

Load data structures from lines

loadArrayFromLines

Load an array from lines of text in a string

  1  $string  The string of lines from which to create an array

loadHashFromLines

Load a hash: first word of each line is the key and the rest is the value

  1  $string  The string of lines from which to create a hash

loadArrayArrayFromLines

Load an array of arrays from lines of text: each line is an array of words

  1  $string  The string of lines from which to create an array of arrays

loadHashArrayFromLines

Load a hash of arrays from lines of text: the first word of each line is the key, the remaining words are the array contents

  1  $string  The string of lines from which to create a hash of arrays

checkKeys

Check the keys in a hash

  1  $test       The hash to test
  2  $permitted  The permitted keys and their meanings

LVALUE methods

Replace $a->{value} = $b with $a->value = $b which reduces the amount of typing required, is easier to read and provides a hard check that {value} is spelt correctly.

genLValueScalarMethods

Generate LVALUE scalar methods in the current package, A method whose value has not yet been set will return a new scalar with value undef.

  1  @names  List of method names

Example:

   $a->value = 1;

genLValueScalarMethodsWithDefaultValues

Generate LVALUE scalar methods with default values in the current package. A reference to a method whose value has not yet been set will return a scalar whose value is the name of the method.

  1  @names  List of method names

Example:

   $a->value == qq(value);

genLValueArrayMethods

Generate LVALUE array methods in the current package. A reference to a method that has no yet been set will return a reference to an empty array.

  1  @names  List of method names

Example:

   $a->value->[1] = 2;

genLValueHashMethods

Generate LVALUE hash methods in the current package. A reference to a method that has no yet been set will return a reference to an empty hash.

  1  @names  Method names

Example:

   $a->value->{a} = 'b';

Strings

Actions on strings

indentString

Indent lines contained in a string or formatted table by the specified amount

  1  $string  The string of lines to indent
  2  $indent  The indenting string

isBlank

Test whether a string is blank

  1  $string  String

trim

Trim off white space from from front and end of string

  1  $string  String

pad

Pad a string with blanks to a multiple of a specified length

  1  $string  String
  2  $length  Tab width

nws

Normalize white space in a string to make comparisons easier

  1  $string  String to normalize

javaPackage

Extract the package name from a java file

  1  $javaFile  Java file

Documentation

Extract, format and update documentation for a perl module

extractDocumentation

Extract documentation from a perl script between the lines marked with:

  #n title # description

and:

  #...

where n is a digit 1-9 indicating the heading level and the # is in column 1.

Methods are formatted as:

  sub name(signature)      #XP comment describing method
   {my ($parameters) = @_; # comments for each parameter separated by commas.

X is optional and indicates that a method whose name ends in X should be generated which dies rather than returning undef.

P is optional and indicates a private method.

Search for '#1': in https://metacpan.org/source/PRBRENAN/Data-Table-Text-20170728/lib/Data/Table/Text.pm to see examples.

Parameters:

  1  $perlModule  Optional file name with caller's file being the default

updatePerlModuleDocumentation

Update the documentation in a perl file and show said documentation in a web browser

  1  $perlModule  File containing the code of the perl module

Index

appendFile

checkKeys

containingFolder

containingPowerOfTwo

containingPowerOfTwoX

convertImageToJpx

currentDirectory

currentDirectoryAbove

dateStamp

dateTimeStamp

extractDocumentation

fileList

fileModTime

fileOutOfDate

fileOutOfDateX

filePath

filePathDir

filePathExt

fileSize

findDirs

findFiles

formatTable

formatTableBasic

genLValueArrayMethods

genLValueHashMethods

genLValueScalarMethods

genLValueScalarMethodsWithDefaultValues

imageSize

indentString

isBlank

javaPackage

keyCount

loadArrayArrayFromLines

loadArrayFromLines

loadHashArrayFromLines

loadHashFromLines

makePath

nws

pad

parseFileName

powerOfTwo

powerOfTwoX

quoteFile

readBinaryFile

readFile

searchDirectoryTreesForMatchingFiles

timeStamp

trim

updatePerlModuleDocumentation

writeBinaryFile

writeFile

xxx

Installation

This module is written in 100% Pure Perl and is thus easy to read, use, modify and install.

Standard Module::Build process for building and installing modules:

  perl Build.PL
  ./Build
  ./Build test
  ./Build install

Author

philiprbrenan@gmail.com

http://www.appaapps.com

Copyright

Copyright (c) 2016-2017 Philip R Brenan.

This module is free software. It may be used, redistributed and/or modified under the same terms as Perl itself.