ATTENTION: You are viewing a page formatted for mobile devices; to view the full web page, click HERE.

Main Area and Open Discussion > General Software Discussion

Looking for Standalone CSV Editor like CSVPad

<< < (2/3) > >>

rjbull:
They may not offer exactly what you want - and I haven't tried them - but Nir Sofer offers two utilities, both of which can be operated from the command line, as well as thee GUI:

CSVFileView v2.48 - CSV / Tab-delimited file viewer and converter for Windows
CSVFileView is a simple CSV file viewer / converter utility that allows you to easily view the content of CSV or tab-delimited file created by NirSoft utilities or by any other software, in a simple table viewer. You can sort the lines according to one of the fields, remove unwanted fields and change their order, and then save the result back into CSV file, tab-delimited file, XML file, or HTML report.

Known Limitations

    CSVFileView cannot load extremely large csv files.
--- End quote ---

TableTextCompare v1.20 - Compare csv / tab-delimited text files
TableTextCompare is a small utility that allows you to easily compare 2 tab-delimited or comma-delimited (csv) files, and find out the difference between the 2 files. You can use this tool for comparing 2 different snapshots of data, created by other NirSoft utilities, like DriverView, ServiWin, USBDeview, CurrPorts, WirelessNetView, ShellExView, and many others...
For example, You can use DriverView utility to save 2 snapshots of loaded drivers list into a tab-delimited file, and then use TableTextCompare to easily find out which device drivers were added, removed, or changed since the time that the first snapshot was taken.

TableTextCompare can make the comparison even if the records of the 2 files are not sorted in the same order, or if the fields are not positioned in the same order.
--- End quote ---
Looks like a "diff" for CSV files.

BGM:
I've tried Ron's Editor (weird interface).  CSVFileView doesn't feel right.  I've tried TableTextCompare, too.  The Syntax-K thingy requires a special library...

I still haven't found what I'm looking for.

Shades:
Teapot's interface feels like a spreadsheet. An old fashion spreadsheet. So I am not sure how well you would like that.

But it is free, tiny, portable and CSV is only one of the formats it supports. According to the included manual it can supports more file formats from old software like Lotus-1-2-3.

The manual:

--- Code: Text ---Teapot User GuideMichael Haardt, Jörg Walterhttp://www.syntax-k.de/projekte/teapot For ages, spread sheet programs have been closely associated with finan-cial calculations done by typical end-users. But it has shown that thereis also hacker’s work which can be done with them, like calculate monitortimings for various resolutions, produce convincing time statistics whichjustify the lack of documentation or the need for a budget increase to youremployer. This first part of this user guide explains how the various func-tions of teapot are used, whereas the second part gives an introduction tospread sheets and explains the expression evaluator and its functions. Contents1 Copyright, Contributors and License 22 Introduction to Spread Sheets 22.1 General Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22.2 The First Steps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32.3 Differences Between User Interfaces . . . . . . . . . . . . . . . . . . . . . . 53 Command Mode 54 The Line Editor 75 Interactive Functions 75.1 Cell Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75.1.1 Precision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85.1.2 Exponential / Decimal . . . . . . . . . . . . . . . . . . . . . . . . . . 85.1.3 Adjustment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85.1.4 Label . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85.1.5 Lock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85.1.6 Ignore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95.1.7 Transparent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95.1.8 Shadow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95.1.9 Column Width . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95.2 Block Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95.2.1 Copy/Move . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95.2.2 Fill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95.2.3 Clear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95.2.4 Insert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105.2.5 Delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105.2.6 Sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105.2.7 Mirror . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105.3 Saving and Loading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115.3.1 File names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115.3.2 File Formats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115.4 Other Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125.4.1 Goto Location . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125.4.2 Shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135.4.3 Version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135.4.4 Help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 Batch functions 137 Expressions 147.1 Data Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147.2 Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147.3 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157.4 Expression Grammar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 Frequently Asked Questions 198.1 Why is 1.0 unequal 1.0? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198.2 How do I hide intermediate results? . . . . . . . . . . . . . . . . . . . . . . 198.3 Why is there no conditional evaluation? . . . . . . . . . . . . . . . . . . . . 19 2 INTRODUCTION TO SPREAD SHEETS1 Copyright, Contributors and LicenseTEAPOT (Table Editor And Planner, Or: Teapot), is copyrighted 1995–2006 by MichaelHaardt, and 2009–2010 by Jörg Walter. The implementation of clocked expressions is modeled after the description of clockedevaluation in the PhD work of Jörg Wittenberger at the University of Technology inDresden, Germany. The trigonometric functions were inspired by Koniorczyk Mátyás.The context output format was contributed by Marko Schuetz.The (currently unused) message catalogs were contributed by Guido Müsch, Wimvan Dorst, and Volodymyr M. Lisivka. This program is free software: you can redistribute it and/or modify it under theterms of the GNU General Public License as published by the Free Software Founda-tion, either version 3 of the License, or (at your option) any later version.This program is distributed in the hope that it will be useful, but WITHOUT ANYWARRANTY; without even the implied warranty of MERCHANTABILITY or FIT-NESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for moredetails. You should have received a copy of the GNU General Public License along with thisprogram. If not, see <http://www.gnu.org/licenses/>. 2 Introduction to Spread Sheets 2.1 General IntroductionA spread sheet consists of cells formed by rows and columns. Additionally, in manyspread sheets you have a third dimension, which you can imagine as various sheetslaying on top of each other. The third dimension allows you to hide intermediate re-sults, show you additional results you do not want to appear in the “official” tables,keep sheets per time period (like 12 sheets for each month in a year) while allowingyou to make calculations over the entire time interval and much more. Figure 1 showsthe three dimensions:xyz Figure 1: Three-Dimensional Spread Sheet Layout You can think of cells as variables, which value is the value of an associated expres-sion. The expression may be constant, like 1.23, or it may be a function of other cellvalues. The advantage compared to a programmable calculator is that if you changea number, you directly see all changes in other cells caused by that. Often this allowsyou to get a feeling how much you may change basic sizes with still getting satisfyingresults without having to solve the problem analytically. 2.2 The First Steps 2 INTRODUCTION TO SPREAD SHEETSSpread sheets offer many editing functions in order to modify, clear, copy and movecells or blocks of cells. Besides the usual mathematical functions, there are functionswhich work on blocks of cells, like calculating the sum of a block or counting all non-empty elements. Further there are functions working on character strings, becausemost likely you also want text besides numbers. The next section will introduce you tosome of these by examples. teapot is a traditional spread sheet and a typical UNIX program, because it doesjust one thing: Calculations. It does not include any graphics functions and never will,but it allows to export data in many formats, so you can use your favourite graphicssoftware. 2.2 The First StepsNow that you should have an idea, it is probably a good time to make your first steps.This section will show you how to create and save a sheet which contains two numbersand their sum. Start the program without any arguments 1 :teapot You see an empty sheet with the cell cursor being at the upper left corner. Further, thestatus line tells you that this cell is really empty:E @(0,0,0)=The E means that you can edit the sheet. A V would mean that you could only viewits contents. The meaning of @() will be explained soon. You are now in the commandmode of teapot. Press the Enter key to edit this cell. A complete list of command modefunctions will be given later. A prompt will appear below the status line:Cell contents: 1 Now the cell at position 0,0,0 has the integer constant 1. The status line shows youthe cell contents, whereas in the sheet you see its value. Since constants are identicalwith their values, both are 1. Now move the cell cursor down one row and edit thatcell, giving it the integer constant 41. Now that you have two numbers, move the cell cursor to cell 0,2,0 and give that cellthe following contents:Cell contents: @(0,0,0)+@(0,1,0)If you were confused about the difference between contents and value of a cell, it shouldbecome more clear now: The status line shows the contents, which is the arithmeticexpression to calculate the sum of two cells, whereas in the sheet you see the valueof that expression: 42, which was to be expected. @(x,y,z) is a function which takesthree coordinates and returns the value of the cell at the given position. As you can see, the arithmetic expression is not too readable. If you would move cellsaround, it would not even work any more. For these reasons, you can use symbolic1 If you are using the graphical version of teapot, please see section 2.3 on page 5. 2.2 The First Steps 2 INTRODUCTION TO SPREAD SHEETSnames instead of coordinates, called labels. When used in an expression, a label islike a pointer to a cell, its data type is location. Move to cell 0,0,0 and use / (slash) incommand mode to get into the main menu. Depending on your screen size, you maynot see all of it. In this case, move the highlighted block right (or left) to scroll throughit and to see all items. Now change its label attribute: A)ttributes, L)abel:Cell label: Paper Then go one cell down and change its label to Tapes. After, move again one cell downand change the expression to:Cell contents: @(Paper)+@(Tapes) As you see, you can call the function @ with three integer values or with one locationvalue. Now the expression is more understandable, at least to you. To someone else,the sheet only contained three numbers, so a little text should be added.  To accomplish that, a new column needs to be inserted: B)lock, I)insert, C)olumn, W)hole column. The last menu item means that you want to insert a whole new column,not only a partial column. If you move the cursor around, you will see that everythingis still fine, because you used labels. Go to cell 0,0,0 and edit it:Cell contents: "Paper:" This is how you enter strings. A string is a data type on its own, don’t confuse thiswith labels. If you feel like it, leave the quotes and the colon away, and you will seethe difference, because the result will not be a string, but the value of the label Paper,which is &(1,0,0).  Now change the cells below to "Tapes:" and "Result:". This is something that is understandable to others, too. As the last step, save your work sheet to a file: F)ile, S)ave. The native file formatis XDR, so choose that. Up to now, your sheet does not have a name, so you will beprompted for one:New file name: firststepUnless you see an error message after, your sheet is written to a file. If you have come this far, quit (from the main menu) and you have successfullycompleted your first steps on using teapot.  Now you know cells, the difference between contents and values, you learned thatlabels are a good thing and you can do simple cell modifications as well as savingyour work. This is enough for most applications. If the capabilities described in the next section confuse you, then it is unlikely thatyou need them really. Just skip that section and don’t worry about it.You may wonder what happens if you have circular dependencies, i.e. you have acell which evaluates to its own value plus one.  Well, the answer is that it depends on the order in which you create this cell. If youfirst give it the value 1 and after edit it to contain the expression which refers toitself plus 1, then you will find that each recalculation, like after editing other cells, will increase the value. While this may be funny, it is certainly not useful as you cannot reset the cell and you have little control of its development. 2.3 Differences Between User Interfaces 3 COMMAND MODEWhat you really want is a base value and an iterative expression along with a wayto control the recalculations. teapot supports this by allowing two expressions per cell. The expressions you have used so far are the ones which evaluate to the base values.Each time you edit a cell, the whole sheet will be reset, which means that all resultsare recalculated using the base values. After, you can clock the sheet, which is why theiterative part is also called clocked expression.  A clock is an atomic operation, which means that all cell results will be recalculated in away that the new result will only show after the entire recalculation. An examples will demonstrate how to make use of this feature. The notation x ->y means that x is the base expression and y is the clocked expression. Don’t let thisconfuse you, as both are entered separately: teapot does not have an -> operator, butit displays the cell contents this way for increased overview.  So, give the cell a base expression of 1 and a clocked expression of @(0,0,0)+1 (usingESC-Enter or Meta-Enter) and you will see:@(0,0,0)=1 -> @(0,0,0)+1 The sheet is currently in reset condition and the result is 1. Now clock it and you willsee how the value increases. After this introductional chapter, you should be familiar with the basic concepts inspread sheets. The next chapters explain all functions available in detail. You shouldread them to get an overview of the possibilities offered by teapot.  Finally, we will come back to using teapot by showing some common problems andtheir solutions. 2.3 Differences Between User InterfacesTEAPOT comes in two flavours: A mouse-and-keyboard operated graphical applicationand a traditional console-based program. Large parts of this manual were writtenwhen the GUI version didn’t exist, so there may be occasional inconsistencies. Most notably, a few key bindings don’t exist. If something doesn’t work as describedin here, refer to the pull-down menus, where all functionality can be found.  In addition to the common keys, the GUI variant has extended mouse and keyboardbindings that work similarly to other GUI applications. There are not yet documented,but should “just work” as expected. 3 Command ModeRight after starting teapot, you are in the command mode. Many functions from thecommand mode are also available from menus, but using keys is faster and somethings, like moving the cell cursor, are only available through keys. Table 1 on thenext page lists all available key bindings 2 . . (Period) marks blocks: The first time it marks the beginning of a block, which isthen extended by moving the cell cursor. The next time, it marks the end of the blockwhich lets you move the cell cursor after without changing the block. The third time,it removes the block marks again. 2 If you are using the graphical version of teapot, please see section 2.3. 3 COMMAND MODEFunction Key ASCII Key FunctionNext Line Ctrl-N Cursor downPrevious Line Ctrl-P Cursor upBegin Ctrl-A Cursor to column 0End Ctrl-E Cursor to last column+ Cursor to next layer- (Dash) Cursor to previous layer< Cursor to line 0> Cursor to last line_ (Underscore) Cursor to layer 0* Cursor to last layerCtrl-X < One page leftCtrl-X > One page rightF10 / Main menuF2 Save menuF3 Load menuCtrl-X Ctrl-R Load fileEnter Ctrl-J, Ctrl-M Edit cell contents“, @, digit, letter Overwrite cell contentsMeta-Enter Esc Ctrl-J, Esc Ctrl-M Edit clocked cell contentsBackspace Ctrl-H Edit cell contents. (Period) Mark blockCtrl-L Redraw screenCtrl-Y Paste blockCtrl-R Reset sheetF9 Ctrl-S Clock sheetEsc z Save and quitCtrl-X Ctrl-C QuitNext Page Ctrl-V One page downPrevious Page Meta-V One page upCancel Ctrl-G, Ctrl-C Abort current actionTable 1: Key Bindings in Command Mode 5 INTERACTIVE FUNCTIONSFunction Key ASCII Key FunctionPrevious Character Ctrl-B Move cursor leftNext Character Ctrl-F Move cursor rightBegin Ctrl-A Move cursor to column 0End Ctrl-E Move cursor to last columnEnter Ctrl-J, Ctrl-M Finish editingCtrl-L Redraw screenCtrl-T Transpose charactersCtrl-\ Go to matching parenCancel Ctrl-G, Ctrl-C Abort editingBackspace Ctrl-H Delete previous characterDelete Ctrl-?, Ctrl-D Delete current characterInsert Toggle insert modeTable 2: Key Bindings for the line editor 4 The Line EditorMany functions in teapot require editing a line of text, e.g. editing cell contents, typingfile names and the line. Similar to the command mode, all things can be reached bycontrol codes and most by function keys. Table 2 lists all available key bindings 3 . Besides the regular line editor functions, you may use Ctrl-O (Tab in the GUI ver-sion) to temporarily leave the editor in order to move around in the sheet if you areediting cell contents. Another Ctrl-O (resp. Tab) brings you back to the line editor. While moving around in the sheet, you can insert the value (v) or position (p) at thecursor position in the edited cell. Clicking on a cell while editing has the same effectas moving to that cell and pressing (p). Aborting line editing means that you will get right back to command mode, whateveryou started doing will have no effect. 5 Interactive FunctionsMost actions are available through the menu. Most of these will be applied to all cellswithin a block if a block of cells is marked. 5.1 Cell AttributesCells can have several attributes:• A cell label, which is useful because it avoids to directly address cells by theirposition. A cell label must be different from function names.• The cell adjustment, which determines if the cell value is printed left adjusted,right adjusted or centered. These only apply to the console version. The GUI version has input fields that worklike all other input fields. 5.1 Cell Attributes 5 INTERACTIVE FUNCTIONS• The precision for the output of floating point values. The default is 2 digits afterthe dot.• If floating point numbers should be printed in scientific notation (0.123e1) or asdecimal number (1.23). It only affects the output, if the cell value is a floatingpoint number.• If the cell is shadowed by its left neighbor. This means that the left neighborcell additionally uses the room of the shadowed cell.• If the cell is locked which prevents to accidentally edit or clear it. Note thatblock operations override this attribute, because when you deal with blocks, youusually know what you are doing.• If special characters for e.g. roff and LA T E X should be quoted (default) or not. Notquoting them allows special effects (if you know roff or LA T E X), but is of course not portable. 5.1.1 PrecisionThe precision only changes what is printed, teapot always uses the maximum precisionfor calculations. It also only affects the output if the cell value is a floating pointnumber. Entering an empty precision means to set it to the default value. 5.1.2 Exponential / DecimalForces exponential notation for numbers in a cell. Decimal mode will prefer plaindecimal numbers unless the result is very big or very small. 5.1.3 AdjustmentCells contents can be aligned to the left, right or centered. By default, text is leftadjusted and numbers are right adjusted. 5.1.4 LabelThis function lets you edit the cell label of the current cell. Further it changes alloccurrences of it in the cell contents to the new value, unless you erased the cell label.If a block has been marked by the time you edit the cell label, all occurrences of thelabel in contents of cells in that block will be changed. 5.1.5 LockYou can lock cells to protect them from accidental editing. Note that this protectsyou from modifying single cells. If you modify a block of cells which contains lockedcells, those will be modified as well. This has been done because when using blockcommands, you usually know what you are doing. 5.2 Block Functions 5 INTERACTIVE FUNCTIONS5.1.6 IgnoreIgnored cells will be completely ignored. They appear as empty cells on screen andduring calculations. This is useful for temporarily disabling parts of your calculation,as the former content reappears when the ignore is removed again. 5.1.7 TransparentUsually, values are quoted as needed so that you get the exact same output as onscreen. Transparent cells will be exported as-is into display-oriented file formats (LA T E X, etc.) so that you can embed commands for subsequent processing in cellvalues. 5.1.8 ShadowShadowed cells are effectively nonexistent. Instead, their left neighbor cell extendsinto the shadowed cell, so that longer text can be displayed. You may think of shadow-ing as a way to get multi-column cells. 5.1.9 Column WidthThe column width only affects the screen display, not the formatting of the final output(except formatted text files). It is intended to let you make better usage of the screenfor more overview. If the width is too small to display the cell value, a placeholder willbe displayed. 5.2 Block Functions5.2.1 Copy/MoveTo copy a block of cells, mark it, then move the cell cursor to where the upper leftcorner of the copy should be and issue the copy command. Moving works similar, justuse the move command. Of course you can mark three-dimensional blocks and copythem anywhere in the three-dimensional sheet, but doing so requires a good three-dimensional imagination to get what you want. 5.2.2 FillTo fill a block of cells, first mark a the block it should be filled with. This may be justone cell! Then move the cell cursor to where the upper left corner of the block to befilled should be and issue the fill command. You will be prompted for how often themarked block should be repeated in each dimension. For example, you may to repeata cell 9 times below. Mark it, then move down one row. Issue the fill command andanswer 1 to the number of column repetitions, 9 to rows and 1 to layers. 5.2.3 ClearClearing means to delete the cell contents and set all attributes to the default value. Ifyou want to preserve the attributes, just edit the contents of a cell and delete them. 5.2 Block Functions 5 INTERACTIVE FUNCTIONS5.2.4 InsertSince work sheets can be three-dimensional, you can insert cells in all three dimen-sions, too. The inserted cells will be empty and their attributes have the default values.Cells will always be moved away from the front upper left corner to make room for theinserted cells. If no block is marked, you will be asked if you really only want to inserta cell of if you want to insert a whole row, line or sheet. 5.2.5 DeleteDeleting works contrary to inserting. The deleted cells will be filled by moving neigh-bour cells to their positions. You will be prompted for the direction from where thosecells will be taken. Deleting an entire column column-wise is done by marking thecolumn, use the delete command and chose X direction. 5.2.6 SortMarked blocks of cells can be sorted after one or multiple keys, either column-wise,row-wise or depth-wise. Sorting a two dimensional block row-wise will sort lines, butif a three dimensional block is sorted row-wise, then horizontal layers will be sorted.The sort key is specified as vector which is orthogonal to the sorted elements, eitherin ascending or descending order. The following example illustrates the sort function. The upper left part of the screen should look like this:0 0 10 1 one1 2 two2 3 three3 4 four The box shows you which block to mark. Now this block should be sorted row-wise,with the sort key being the numbers in descending order, i.e. we want the lines beingnumbered 4,3,2,1. Go to the block menu, then select sort. Use R)ow, because that ishow we want to sort this block. The X position of the sort key vector is 0, becausethe column 0 contains the numbers. The Z position is 0, too, because those numbersare on sheet 0. Now chose D)escending as direction. At this point, you could adda secondary key or decide to sort the block by the keys entered so far. Use S)ortregion to sort it. That’s it, the screen should look like this now:0 0 10 4 four1 3 three2 2 two3 1 one 5.2.7 MirrorMirroring a marked block of cells can be done in three directions: Left/right, up-side/down and front/back. 5.3 Saving and Loading 5 INTERACTIVE FUNCTIONS5.3 Saving and Loading5.3.1 File namesUsually, you want to overwrite the loaded file. For this reason, the loaded file name isremembered. If the sheet doesn’t have a file name, like after starting an empty sheet,you will be asked for a name when saving. Occasionally, you may want to rename a sheet, like before making critical changesor when you load an existing sheet to have a start for making a new one. The Save Asfunction allows you to save the file under a new name. 5.3.2 File FormatsXDR (.tp) XDR (eXternal Data Representation) is a standard invented by Sun Mi-crosystems which defines a canonical way of storing/transporting data on external me-dia. Its advantage is that it is widely available and that it defines a portable floatingpoint number format. The native teapot file format uses XDR so it is portable across different machinearchitectures and operating systems. The advantage of this over the portable ASCIIformat is that due to the (usually) missing conversion calculations any floating pointconstants will be saved/loaded exactly without conversion errors. ASCII (.tpa) The ASCII file format allows easy generation/modification of saved sheetsby shell scripts. Due to binary/ASCII conversion, there may be conversion errors infloating point constants. The default extension is .tpa. CSV (.csv) CSV (comma seperated value) files only contain the data, not the expres-sions calculating it. Many spread sheets can generate this file format and many graph-ics programs like gnuplot(1) can read it. The field separator usually is a tab or comma,strings may be enclosed in double quotes and decimal numbers have a dot to markthe fractional part.  One popular variation uses semicolons for separating fields and a decimal commainstead of a decimal point, which teapot tries to autodetect. On load, strings without quotes and with a 0x prefix followed by hexadecimal digitswill be converted to integers. When loading CSV files, the sheet will not be cleared andthe data will be load relative to the current cursor position. SC SpreadsheetCalculator (.sc) teapot can load simple SC sheets to convert themto teapot’s native format. While loading, teapot converts all references to absolute cellpositions to labels. This allows to insert and delete in such sheets without screwingthe whole sheet up. teapot can not save sheets in SC format, because SC lacks manyfeatures. For now, only the most basic SC features are supported. Lotus 1-2-3 (.wk1) teapot can load simple WK1 sheets to convert them to teapot’snative format. By default, 1-2-3 cell references are relative, so don’t be surprised by abig amount of relative references in the resulting teapot sheet. For now, only the mostbasic 1-2-3 features are supported. 5.4 Other Functions 5 INTERACTIVE FUNCTIONSFormatted ASCII (.txt) The generated formatted ASCII files contain about what yousee on the screen. If your sheet has more than one layer, then the various layers willbe saved separated by form feeds. Troff tbl (.tbl) teapot can generate tbl(1) table bodies in single files which are supposedto be used like this:.TSoptions;.so filename.TE You will have to use soelim(1) to eliminate the .so requests before the tbl run. Theoptions; are optional. If you use GNU roff, you will need to eliminate .lf requests,because this GNU roff extension confuses GNU tbl:soelim file | grep -v ’^\.lf’ Alternatively, you can generate a stand-alone document, which needs no further op-erations to format and print. Note: If no block is marked, the whole sheet will besaved. L A T E X (.latex)If you generate L A T E X2 ε tables in single files, you include them in documentsusing the \include command. Alternatively, you can generate a stand-alone document,which needs no further operations to format and print. Note: If no block is marked,the whole sheet will be saved. ConT E Xt (.tex) Analogous to L A T E X output, this generates input suitable to theConT E Xt macro package. HTML (.html) You can generate html table bodies in single files which could be usedin combination with server-side includes. This feature differs between the variousservers, so refer to the manual for your web server for details, please. Alternatively, you can generate a stand-alone document. Note: If no block is marked,the whole sheet will be saved. 5.4 Other Functions5.4.1 Goto LocationSometimes, you directly want to go to a specific position, either to change its contentsto see which cell a location expression refers to. This function lets you enter an expres-sion, which must evaluate to a value of the type location. If so, the cursor is positionedto that location. For example, you could enter &(10,2) to go to cell 10,2 of the currentlayer or you could enter the name of a label you want to go to. Relative movements areno problem, either. 5.4.2 ShellStart a sub shell. Exiting from that sub shell will bring you back into teapot. Thisfunction does not exist in the GUI version. 5.4.3 Versionteapot will display its version number and copyright statement. 5.4.4 HelpIf teapot was built with the integrated help viewer, you can access this manual fromwithin teapot itself. 6 BATCH FUNCTIONSBesides interactive facilities, teapot has a batch mode. Using this batch mode, shellscripts can generate output from teapot sheets. This is handy if you use make(1) togenerate a bigger document containing tables, because you don’t have to generate a tblor L A T E X file each time you modified a sheet: make will do so. In batch mode, teapot reads batch commands from standard input. The followingcommands are available:goto location Go to the specified location.from location Start marking a block.to location End marking a block.sort-x d|a y z [ d|a y z ... ]sort-y d|a x z [ d|a x z ... ]sort-z d|a x y [ d|a x y ... ] Sorts the marked block as described in section 5.2.6 onpage 10, column-wise, row-wise or depth-wise, respectively. "d" or "a" specify thesort order to be descending or ascending. x, y and z specify the position of the sortkey relative to the first cell of the marked block. Up to eight sort keys can bespecified.  This example reproduces the result from section 5.2.6:echo "from &(1,1,0)to &(2,4,0)sort-y d 0 0save-csv result_num.txt" | teapot -b doc/unsortedsave-tbl filesave-csv filesave-latex filesave-context filesave-html file Save the marked block in the specified format as file.load-csv file Load file in the specified format to the last goto location. This is thesame functionality as the interactive load described in subsection 5.12.4. 7 ExpressionsCells consist of a base (reset) expression, a clocked expression, and a current value. Ifthe sheet is currently in the reset state (the default), all cells display their base valueas current value. When the sheet is clocked (see Table 1), the clocked expression is evaluated, using thecurrent value of referenced cells. The new current value is the result of that evaluation. 7.1 Data TypesIn teapot, each value has an associated data type. The following data types exist:Empty Empty cells have 0, 0.0 or “” as value, depending on context.String A string is a sequence of characters enclosed by double quotes: "This is astring".  A double quote can be part of the string, if it is quoted using a backslash: “\””. If you want the backslash to appear in the output instead of quoting the next character, use it to quote itself: “\\”. Floating Point Floating point values are inexact, their precision and range depends onthe implementation of the C type double on your system. An example is: 42.0Integer Integer values are exact, their range depends on the C type long on your sys-tem. An example is: 42 Location Cell labels and the &() function have this type, but there are no locationconstant literals. Error Syntactical or semantical (type mismatch) errors cause this value, as well asdivision by 0 and the function error(). An error always has an assigned errormessage.  Functions and operators, when applied to a value of the type error,evaluate to just that value. That way, the first error which was found deep insidea complicated expression will be shown. 7.2 OperatorsUnlike other spread sheets, the operators in teapot check the type of the values theyare applied to, which means the try to add a string to a floating point number will resultin an type error.  The following operators are available, listed in ascending precedence:x<y evaluates to 1 if x is less than y. If x or y are empty, they are considered to be 0 ifthe other is an integer number, 0.0 if it is a floating point number and the emptystring if it is a string. 7.3 Functionsx<=y evaluates to 1 if x is less than or equal to y.x>=y evaluates to 1 if x is greater than or equal to y.x>y evaluates to 1 if x is greater than y.x==y evaluates to 1 if x is equal to y.x=y evaluates to 1 if the floating point value x is almost equal to the floating pointvalue y. Almost equal means, the numbers are at most neighbors.x!=y evaluates to 1 if x is not equal to y.x+y evaluates to the sum if x and y are numbers. If x and y are strings, the result isthe concatenated string. There is no dedicated logical OR operation, so use + forthat.x-y evaluates to the difference if x and y are numbers.x * y evaluates to the product if x and y are numbers. There is no dedicated logical ANDoperation, so use * for that.x/y evaluates to the quotient if x and y are numbers.x%y evaluates to the remainder of the division if x and y are numbers.x^y evaluates to x to the power of y.-x evaluates to -x if x is a number. If x is empty, the result will be empty, too.(expression) evaluates to the expression.function(argument,...) evaluates to the value of the function applied to the valuesresulting from evaluating the argument expressions. 7.3 FunctionsThis section documents all available functions in alphabetical order. The functions aregiven in a C-like notation, so use @(0,0,0) instead of @(integer 0, integer 0,integer 0). If no type is given for the result of a function, it means the result typedepends on the arguments. Brackets mark optional arguments.@([int x][,[int y][,[int z]]])@(location l) returns the value of the cell at position x, y, z. If any of x, y or z isomitted, the coordinate of the cell is used.location &([int x][, [int y][, [int z]]]) returns a pointer to the cell at location x, y, z. If zis omitted, the z position of the current cell is used. If y is missing as well, the yposition (row) of the cell is used.string $(string env) evaluates to the contents of the specified environment variable. Ifthe variable does not exist, then an empty string will be returned.float abs(float x)int abs(int x) evaluates to the absolute value of x.float acos(float|int x) evaluates to the arc cosine of x, where x is given in radians.float arcosh(float|int x) evaluates to the arc hyperbolic cosine of x, where x is givenin radians.float arsinh(float|int x) evaluates to the arc hyperbolic sine of x, where x is given inradians.float artanh(float|int x) evaluates to the arc hyperbolic tangent of x, where x is givenin radians.float asin(float|int x) evaluates to the arc sine of x, where x is given in radians.float atan(float|int x) evaluates to the arc tangent of x, where x is given in radians.clock(integer condition,[location[,location]) conditionally clocks the specified cell ifthe condition is not 0. If two locations are given, all cells in that range will beclocked. The return value of clock is empty.float cos(float|int x) evaluates to the cosine of x, where x is given in radians.float cosh(float|int x) evaluates to the hyperbolic cosine of x, where x is given in ra-dians.float deg2rad(float|int x) evaluates to the degrees that are equivalent to x radians.float e() evaluates to the Euler constant e.error error(string message) evaluates to an error with the specified message.eval(location) evaluates to the value of the expression in the cell at the given location,but evaluated in the context of the cell using eval(). This function may not be usednested any deeper than 32 times.float float(string s) converts the given string into a floating point number.float frac(float x) evaluates to the fractional part of x.int int(float x[,integer neg, integer pos]) converts x to an integer value by cutting offthe fractional part. If given, the value of neg and pos determines how negativeand non-negative numbers will be converted:neg/pos Result< -1 next smaller integer value-1 round downward0 cut fractional part off (default)1 round upward> 1 next larger integer valueint int(string s) converts s to an integer number.string len(string s) evaluates to the length of s.float log(float|int x[,float|int y) evaluates to the logarithm of x. If y is specified, theresult will be the natural logarithm, otherwise it will be the logarithm to the baseof y.location max(location l1, location l2) evaluates to the maximum in the same waymin does for the minimum.location min(location l1, location l2) evaluates to the location of the minimum of allvalues in the block marked by the corners pointed to by l1 and l2. Note that theempty cell is equal to 0, 0.0 and "", so if the first minimum is an empty cell, theresult will be a pointer to this cell, too. If you are not interested in the location ofthe minimum but the value itself, use @(min(l1, l2)).int n(location l1, location l2) evaluates to the number of non-empty cells in the blockmarked by the corners pointed to by l1 and l2.poly(float|integer x, float|integer cn[, ...]) evaluates the polynome c n ·x n +...+c 0 ·x 0 .float rad2deg(float|int x) evaluates to the radians that are equivalent to x degrees.float rnd() evaluates to a pseudo-random number between 0.0 and 1.0.float sin(float|int x) evaluates to the sine of x, where x is given in radians.float sinh(float|int x) evaluates to the hyperbolic sine of x, where x is given in radians.string strftime(string f [, integer t]) evaluates to the time t formatted according to theformat specified in f. Times in t are counted in seconds since epoch (1970-1-10:00). If t is empty or 0, the actual time is used. For the format specifications con-sult the man page of your c library, strftime (3). Example: @(now)=int(strftime("%s"))sets the field with label now to the actual time.string string(location l)string string(integer x)string string(float x[, [integer precision][, integer scientific]]) evaluates to a string con-taining the current value of the given cell at location l, or to the numeric value xwith the given precision. The scientific flag determines if decimal (0) or scientific(unequal 0) representation is used.int strptime(string f, string datetime) evaluates to the seconds since epoch (1970-1-10:00) of the datetime string, parsed according to the format specified in f. For theformat specifications consult the man page of your c library, strptime (3).string substr(string s,integer x,integer y) evaluates to the substring of s between x andy, which start at 0. 7.4 Expression Grammarsum(location l1, location l2) evaluates to the sum of all values in the block markedby the corners pointed to by l1 and l2.float tan(float|int x) evaluates to the tangent of x, where x is given in radians.float tanh(float|int x) evaluates to the hyperbolic tangent of x, where x is given inradians.int x([location l])int y([location l])int z([location l]) evaluate to the x, y and z position of the given location, of the cur-rently updated cell if none is given. These functions are usually used in combinationwith the @ function for relative relations to other cells.digit::= 0 | .. | 9hex_digit::= 0 | .. | 9 | a | .. | foctal_digit::= 0 | .. | 7decimal_integer::= digit { digit }hex_integer::= 0x hex_digit { hexdigit }octal_integer::= 0 octal_digit { octdigit }integer::= decimal_integer | hex_integer | octal_integerfloat::= digit { digit } [ . ] { digit } [ e | E [ + | - ] digit { digit } ]quoted_character::= \ any_charactercharacter::= any_character | quoted_characterstring::= " { character } "identifier_character::= _ | @ | & | . | $ | alpha_characteridentifier::= identifier_character { identifier_character | digit }function::= identifier ( [ term ] { , [ term ] } )label::= identifierparenterm::= ( term )negterm::= - primaryprimary::= function | label | parenterm | negtermpowterm::= primary { ˆ primary }mathterm::= powterm { / | * | % powterm }factor::= mathterm { + | - mathterm }term::= factor {< | <= | >= | > | == | != factor } 8 Frequently Asked Questions8.1 Why is 1.0 unequal 1.0?If your machine uses binary floating point arithmetic, and chances are that it does, youmay eventually find yourself in the following situation:0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1You expect to see 1.0 as result, and indeed that is what you get. Now you compare thisresult to the constant 1.0, but surprisingly for many users, the result is 0. Apparently,1.0 is unequal 1.0 for teapot. This is not a bug in teapot, in fact it is not a bug at all. The problem is, that 0.1(1.0/10.0) does not have an exact representation in binary floating point arithmetic,similar to how 1.0/3.0 does not have an exact representation in decimal arithmetic (orbinary, for that matter).  As such, a value very close to 0.1 is used, but when displaying it, it will be rounded to0.1. The result is obvious, adding this number which is a little different from 0.1 tentimes leads to a result very close to but not quite 1.0. Since it is so close, displaying itrounded to only a few digits precision shows 1.0. To solve the comparison problem, teapot has the operator = (in contrast to the op-erator ==), which compares two floating point values apart from the last significantbit. Use this operator to compare the two values from above and the result will be 1,meaning they are about equal. Don’t assume that a number which can be expressedwith a finite number of decimal digits will be represented exactly in binary floatingpoint arithmetic. 8.2 How do I hide intermediate results?If you used flat, two-dimensional spread sheets before, you are probably used to hiddencells which contain intermediate results, global constants, scratch areas and the like.teapot has no way to hide cells, but you have three dimensions. Just use one or morelayers for such cells and give each cell a label in order to reference and find it easily. 8.3 Why is there no conditional evaluation?There is no special operator or function for conditional evaluation. I could add oneeasily, but then next someone would ask for loops and someone else for user-definedfunctions, variables and so on. If you need a programming language, you know whereto find it. But don’t worry. The answer is, that conditional evaluation comes for free withteapot’s orthogonal cell addressing. As an example, depending on the cell labelled Xbeing negative or not, you want the result to be the string "BAD or "GOOD".  This is the solution:eval(&((@(X)>=0)+x(BAD),y(BAD),z(BAD))) The cell labelled BAD contains the string "BAD", its right neighbor contains the string"GOOD". If you have nested conditions, you could weight them with 1, 2, 4 and soon to address a bigger range of cells. Alternatively, you could make use of all threedimensions for nested conditions.

x16wda:
Was CSVEd missing some feature that you needed? Or was the interface just too different?

BGM:
@x16wda - well, yeah, the interface mainly.  For one, it has it's GREAT BIG NAME AND VERSION NUMBER embedded in the main window.  Who needs that there?  Version number is in the title bar already. 

I really hate ribbons.  Good ole' Menus and Toolbars are what I crave.  Menus cram all the commands into one place organized by their main topic (their name on the main toolbar) so it's super easy to go through and find all the commands you want.  With ribbons, you have to and look at everything and decide what it is before you use it.  (I know, I'm nit-picking).  At least you can hide the ribbon until you actually need it.

I do wish it would display large icons instead of just small ones for it's toolbars.  I'm starting to get old.



It *does* have a lot of versatility, though, and is most likely the best program in this thread so far.
Actually, I think I'll start using this program.

Navigation

[0] Message Index

[#] Next page

[*] Previous page

Go to full version