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)

Components

Create file names from file name components

filePath

Create a file path from an array of file name components

1  @file  File components  

filePathDir

Directory from an array of file name components

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  

containingPowerOfTwo

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

1  $n  Number to check  

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

Object oriented methods using LVALUE methods

genLValueScalarMethods

Generate LVALUE scalar methods

1  @names  Method names  

genLValueScalarMethodsWithDefaultValues

Generate LVALUE scalar methods with default values

1  @names  Method names  

genLValueArrayMethods

Generate LVALUE array methods

1  @names  Method names  

genLValueHashMethods

Generate LVALUE hash methods

1  @names  Method names  

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           

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 \A#n and \A# Sections at each level are marked with: #n title # paragraph on one line, followed by entries: sub name(signature) # comment on one line, followed on the next line by: {my ($parameters) = @_; # comments for each parameter separated by commas. Search for '#1': on https://metacpan.org/source/PRBRENAN/Data-Table-Text-20170728/lib/Data/Table/Text.pm to see examples.

1  $perlModule  Optional file name else the caller's file  

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

convertImageToJpx

currentDirectory

currentDirectoryAbove

dateStamp

dateTimeStamp

extractDocumentation

fileList

fileModTime

fileOutOfDate

filePath

filePathDir

filePathExt

fileSize

findDirs

findFiles

formatTable

formatTableBasic

genLValueArrayMethods

genLValueHashMethods

genLValueScalarMethods

genLValueScalarMethodsWithDefaultValues

imageSize

indentString

javaPackage

keyCount

loadArrayArrayFromLines

loadArrayFromLines

loadHashArrayFromLines

loadHashFromLines

makePath

nws

pad

parseFileName

powerOfTwo

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.