Qore Programming Language Reference Manual: Qore::FileLineIterator Class Reference

Qore Programming Language Reference Manual 0.8.11

- Main Page
- Related Pages
- Modules
- Namespaces
- Classes

- Class List
- Class Index
- Class Hierarchy
- Class Members

All Classes Namespaces Functions Variables Groups Pages
Public Member Functions | List of all members
Qore::FileLineIterator Class Reference

This class defines a line iterator for text files. More...

Inheritance diagram for Qore::FileLineIterator:
[legend]

## Public Member Functions
| constructor (string path, *string encoding, *string eol, bool trim=True)
| opens the given file for reading with the given options and creates the FileLineIterator object More...
| copy ()
| Creates a new FileLineIterator object, based on the same object being iterated in the original object (the original file is reopened) More...
string | getEncoding ()
| Returns the character encoding for the FileLineIterator. More...
string | getFileName ()
| returns the file path/name used to open the file More...
string | getLine ()
| returns the current line in the file or throws an `INVALID-ITERATOR` exception if the iterator is invalid More...
int | getPos ()
| Returns the current file position as an integer giving the offset in bytes from the beginning of the file (starting from zero) More...
string | getValue ()
| returns the current line in the file or throws an `INVALID-ITERATOR` exception if the iterator is invalid More...
int | index ()
| returns the current iterator line number in the file (the first line is line 1) or 0 if not pointing at a valid element More...
bool | isTty ()
| returns True if the FileLineIterator is connected to a terminal device, False if not More...
bool | next ()
| Moves the current position to the next line in the file; returns False if there are no more lines to read; if the iterator is not pointing at a valid element before this call, the iterator will be positioned to the beginning of the file. More...
| reset ()
| Reset the iterator instance to its initial state. More...
bool | valid ()
| returns True if the iterator is currently pointing at a valid element, False if not More...

## Detailed Description

This class defines a line iterator for text files.

Since
  Qore 0.8.6

Restrictions:
  Qore::PO_NO_FILESYSTEM

Example: FileLineIterator basic usage
  file content:
  a2ps-4.13-1332.1.x86_64
  a2ps-devel-4.13-1332.1.x86_64
  aaa_base-11.3-7.2.x86_64
  ...
  my FileLineIterator $it("/export/home/pvanek/ren.list");
  while ($it.next()) {
  printf("%s:%d = %n\n", $it.getFileName(), $it.index(), $it.getValue());
  }
  /export/home/pvanek/ren.list:1 = "a2ps-4.13-1332.1.x86_64"
  /export/home/pvanek/ren.list:2 = "a2ps-devel-4.13-1332.1.x86_64"
  /export/home/pvanek/ren.list:3 = "aaa_base-11.3-7.2.x86_64"
  ...
  /export/home/pvanek/ren.list:2155 = "zypper-1.4.5-1.10.x86_64"

## Member Function Documentation

Qore::FileLineIterator::constructor | ( | string | path,
|  | *string | encoding,
|  | *string | eol,
|  | bool | trim = `True`
| ) |  |

opens the given file for reading with the given options and creates the FileLineIterator object

Parameters

  path | the path to open for reading
  encoding | the character encoding tag for underlying file and therefore the string return values for the lines iterated with this class; if not present, the default character encoding is assumed
  eol | the optional end of line character(s) to use to detect lines in the file; if this string is not passed, then the end of line character(s) are detected automatically, and can be either `"\n"`, `"\r"`, or `"\r\n"` (the last one is only automatically detected when not connected to a terminal device in order to keep the I/O from stalling); if this string is passed and has a different character encoding from this object's (as determined by the `encoding` parameter), then it will be converted to the FileLineIterator's character encoding
  trim | if True the string return values for the lines iterated will be trimmed of the eol bytes

Exceptions

  FILELINEITERATOR-OPEN-ERROR | the given file cannot be opened for reading (`arg` will be assigned to the errno value)
  ENCODING-CONVERSION-ERROR | this exception could be thrown if the eol argument has a different character encoding from the File's and an error occurs during encoding conversion
  ILLEGAL-EXPRESSION | FileLineIterator::constructor() cannot be called with a TTY target when %no-terminal-io is set

Qore::FileLineIterator::copy | ( |  | ) |

Creates a new FileLineIterator object, based on the same object being iterated in the original object (the original file is reopened)

Example:
  my FileLineIterator $ni = $i.copy();

Exceptions

  FILELINEITERATOR-COPY-ERROR | the original file cannot be reopened for reading (`arg` will be assigned to the errno value)
  ILLEGAL-EXPRESSION | FileLineIterator::constructor() cannot be called with a TTY target when %no-terminal-io is set

string Qore::FileLineIterator::getEncoding | ( |  | ) |

Returns the character encoding for the FileLineIterator.

Code Flags:
  CONSTANT

Example:
  my string $encoding = $f.getEncoding();

Returns
  the character encoding for the FileLineIterator

string Qore::FileLineIterator::getFileName | ( |  | ) |

returns the file path/name used to open the file

Code Flags:
  CONSTANT

Example:
  my string $fn = $f.getFileName();

Returns
  the file path/name used to open the file

string Qore::FileLineIterator::getLine | ( |  | ) |

returns the current line in the file or throws an `INVALID-ITERATOR` exception if the iterator is invalid

Returns
  the current line in the file or throws an `INVALID-ITERATOR` exception if the iterator is invalid

Code Flags:
  RET_VALUE_ONLY

Example:
  while ($i.next()) {
  printf("+ %y\n", $i.getLine());
  }

Exceptions

  INVALID-ITERATOR | the iterator is not pointing at a valid element
  ITERATOR-THREAD-ERROR | this exception is thrown if this method is called from any thread other than the thread that created the object

See Also
  FileLineIterator::getValue()

int Qore::FileLineIterator::getPos | ( |  | ) |

Returns the current file position as an integer giving the offset in bytes from the beginning of the file (starting from zero)

Code Flags:
  RET_VALUE_ONLY

Example:
  my int $pos = $i.getPos();

Returns
  the current file position as an integer giving the offset in bytes from the beginning of the file (starting from zero)

Exceptions

  ILLEGAL-EXPRESSION | this exception is only thrown if called with a system constant object (stdin, stdout, stderr) when no-terminal-io is set

See Also
  File::setPos()

string Qore::FileLineIterator::getValue | ( |  | ) |
| virtual

returns the current line in the file or throws an `INVALID-ITERATOR` exception if the iterator is invalid

Returns
  the current line in the file or throws an `INVALID-ITERATOR` exception if the iterator is invalid

Code Flags:
  RET_VALUE_ONLY

Example:
  while ($i.next()) {
  printf("+ %y\n", $i.getValue());
  }

Exceptions

  INVALID-ITERATOR | the iterator is not pointing at a valid element
  ITERATOR-THREAD-ERROR | this exception is thrown if this method is called from any thread other than the thread that created the object

See Also
  FileLineIterator::getLine()

Implements Qore::AbstractIterator.

int Qore::FileLineIterator::index | ( |  | ) |

returns the current iterator line number in the file (the first line is line 1) or 0 if not pointing at a valid element

Returns
  the current iterator line number in the file (the first line is line 1) or 0 if not pointing at a valid element

Code Flags:
  CONSTANT

Example:
  while ($i.next()) {
  printf("+ %d: %y\n", $i.index(), $i.getValue());
  }

bool Qore::FileLineIterator::isTty | ( |  | ) |

returns True if the FileLineIterator is connected to a terminal device, False if not

Returns
  True if the FileLineIterator is connected to a terminal device, False if not

Code Flags:
  CONSTANT

Example:
  my bool $b = $i.isTty();

bool Qore::FileLineIterator::next | ( |  | ) |
| virtual

Moves the current position to the next line in the file; returns False if there are no more lines to read; if the iterator is not pointing at a valid element before this call, the iterator will be positioned to the beginning of the file.

This method will return True again after it returns False once if file is not empty, otherwise it will always return False The iterator object should not be used after this method returns False

Returns
  False if there are no more lines in the file (in which case the iterator object is invalid and should not be used); True if successful (meaning that the iterator object is valid)

Example:
  while ($i.next()) {
  printf("line: %y\n", $i.getValue());
  }

Exceptions

  ITERATOR-THREAD-ERROR | this exception is thrown if this method is called from any thread other than the thread that created the object

Implements Qore::AbstractIterator.

Qore::FileLineIterator::reset | ( |  | ) |

Reset the iterator instance to its initial state.

Reset the iterator instance to its initial state

Example
  $i.reset();

Exceptions

  ITERATOR-THREAD-ERROR | this exception is thrown if this method is called from any thread other than the thread that created the object

bool Qore::FileLineIterator::valid | ( |  | ) |
| virtual

returns True if the iterator is currently pointing at a valid element, False if not

Returns
  True if the iterator is currently pointing at a valid element, False if not

Code Flags:
  CONSTANT

Example:
  if ($i.valid())
  printf("current value: %y\n", $i.getValue());

Implements Qore::AbstractIterator.