For the Settings Reference, go here.
1. Calling Commands
2. Go To
3. Standard Editing Tools
4. Selecting Cells
5. Editing Cells
6. Moving Data
7. Deleting Data
8. Duplicating Data
9. Inserting Rows and Columns
10. Finding and Replacing Data
12. Sorting Data
13. Filtering Data
14. Hiding and Showing Data
15. Miscellaneous Data Manipulation
16. Read-Only Mode
18. Delimiters and Character Encodings
19. Showing or Hiding UI Features
20. Changing the Theme
21. Contacting Us
22. Frequently Asked Questsions (FAQ)
There are four ways to call commands:
1. Command Launcher
The command launcher allows you to quickly call commands by just typing. It uses fuzzy search, so your typing doesn’t even have to be that accurate.
2. Menu Bar
The menu bar at the top of the window contains almost all commands.
3. Keyboard Shortcuts
Most commands you’ll use on a regular basis have keyboard shortcuts. You can find out what these are by perusing the command launcher or the menu bar. You can also change them with the
Edit Keyboard Shortcuts command.
Right-clicking on the table will bring up some helpful commands.
There are two navigation commands:
1. Go To File
Only files that are already open or that are in a folder that’s open will show up in the list. To open a file not on the list, you can either open its folder or use
2. Go To Cell
More specific instructions pop up with the command itself.
Standard Editing Tools
Modern CSV does the standard copy, cut, and paste commands (
ctrl+v). It also has undo and redo for most commands (
Selecting a single cell
Click on a cell.
Use the arrow keys to move the selection to a cell.
alt+l– Use these to spare the 200 ms it takes to move your wrist to the arrow keys.
Go To Cell. It’ll tell you what to do from there.
Selecting multiple cells
left-click and drag.
ctrl+left-click on a cell that’s not already selected.
shift+arrow to add one cell to the selection.
ctrl+shift+arrow to select over to the next block edge.
ctrl+shift+r to select the whole row.
ctrl+shift+c to select the whole column.
ctrl+a to select the whole table.
left-click on the row or column label.
left-click on the top left corner button between the row and column labels.
Once you select multiple cells, you can move them around just like single cells (i.e. arrows or
alt+[i|j|k|l]). Most commands work on multiple cells.
The orange cell is the
main selected cell or
main cell. The yellow cells are the
secondary selected cells.
There are numerous ways to edit cells:
1. Overwrite currently selected cells.
2. Edit selected cell without overwriting.
3. Fill selected cells with series.
4. Prepend or Append to multiple cells.
Additionally, you can either edit directly in the cell or use the Editor Pane.
1. Overwrite currently selected cells
Just start typing. This works with multiple cells selected.
2. Edit selected cell without overwriting
Edit Selected Cell
This only works when one cell is selected.
3. Fill selected cells with series
Fill Selected Cells with Series
This is useful for, say, incrementing numbers. Further instructions will show up with the command.
4. Prepend or append to multiple cells
Prepend Cell Contents
Append Cell Contents
If you have multiple cells selected, it will ask you whether you want to add the same text to each cell or add a series of differing values.
The Editor Pane
With the Editor Pane, you can see more clearly the cell contents. Unlike the direct cell editor, you can also insert new lines with
enter and tab characters with
tab are normally used to navigate across cells. If you want them to still behave that way even while editing in the Editor Pane, just disable the
Let Editor Pane Consume Navigation Keystrokes command in the Settings.
alt key is used for data moving operations. You can move individual cells, entire rows and columns, and even the entire table.
Move Cell Contents [Up|Down|Left|Right]
To drag and drop cells with the mouse,
shift+click on the selected cells and drag them wherever you want.
Rows or columns
Move [Row(s)|Column(s)] [Up|Down|Left|Right]
To drag and drop rows or columns with the mouse,
shift+click on the row/column lables and drag them wherever you want.
You can do the following:
1. Clear cell contents
Clear Cell Contents
2. Remove rows and columns
To clear a row or cell of its contents without removing it, select it and use
3. Remove duplicate rows and columns
Remove Duplicate Rows
Remove Duplicate Columns
4. Remove empty rows and columns
Remove Empty Rows
Remove Empty Columns
ctrl+alt duplicates data, whether it be individual cells or entire rows and columns.
Duplicate individual cells
Duplicate Selected Cell Contents [Up|Down|Left|Right]
You can also duplicate cells with the mouse. Press the middle mouse button down over a cell and move the mouse in the direction you want.
Duplicate rows and columns
Inserting Rows and Columns
Finding and Replacing Data
esc closes both of them.
The option buttons are at the top. Here they are from left to right:
|Match Whole Word||
|Match Only in Selected Cells||
If you open Find/Replace while multiple cells are selected, the
Match Only in Selected Cells option is automatically selected.
Modern CSV allows you to define header rows and/or columns for your data. It’s typical to have the first row of a CSV be the data labels and the rest be the actual data. For that reason, there is one header row by default. However, you can set as many header rows and columns as you want.
Headers are used for the following purposes:
1. Highlight them so they stand out (or not).
2. Freeze them so they’re always visible (or not).
3. Separate them from the data so they’re not effected by sort and filter operations.
Setting number of header rows or columns
Set Number of Header [Rows|Columns] (Menu, Command Launcher)
Set Headers to Selected Cell (Menu, Command Launcher or right-click menu)
Set Header [Rows|Columns] to Selected [Row|Column] (Menu, Command Launcher or right-click menu)
In the menu, they’re found under
These commands will change it only for the table you’re currently working on. To change it for all tables, currently opened or new, change it in the Settings file under
Number of Header [Rows|Columns].
Highlighting or Unhighlighting header rows and columns
Toggle Highlight Header [Rows|Columns]
Freezing or unfreezing header rows and columns
Toggle Freeze Header Rows and Columns
Toggle Freeze Header [Rows|Columns]
Data can be sorted either by columns or rows, either ascending or descending. It sorts based on the data in the main selected row or column. The headers won’t be sorted.
Sorting does work in read-only mode.
Double-click on the row or column labels.
Sort Selected [Row|Column]- Ascending
Sort Selected [Row|Column]- Descending
ctrl+z undoes a sorting operation.
Data can be filtered, either by rows or columns. That means it only keeps columns or rows that pass the filter criteria. The headers won’t be filtered.
Filtering is subject to the undo and redo commands (
ctrl+y). However, it will not change the underlying data when you save the file.
To delete the filtered out data, use the
Remove All Filtered Out and Hidden Data command. To save the filtered in data (i.e. what’s shown on the table) into a separate file, use the
Save Visible Data As command.
Filtering does work in read-only mode.
Filter Selected [Row|Column]
Filter Selected [Row|Column] with Selected Cell Contents
Viewing and editing filters
Remove Individual Filter(s)
Remove All Filters command removes all filters.
Filter SyntaxWhen you add or edit a filter, the program gives you filter syntax instructions. They are repeated here:
||OR and AND||
||NOT (exclude from search)||
||LESS THAN and GREATER THAN||
||LESS THAN OR EQUAL and GREATER THAN OR EQUAL||
||LESS THAN OR EQUAL or GREATER THAN OR EQUAL (alternative)||
Matching is case insensitive. Spaces before and after filter strings are ignored.
Hiding and Showing Data
You can hide rows or columns without deleting the data. Use one of the following commands:
Hide Selected Row(s)
Hide Selected Column(s)
Hide Empty Row(s)
Hide Empty Column(s)
Hide Empty Row(s) and
Hide Empty Column(s) do not require the headers to be empty.
To show the hidden rows/columns again, use the following commands:
Show Hidden Row(s) in Selection
Show Hidden Column(s) in Selection
Show Empty Row(s)
Show Empty Column(s)
Show All Hidden Row(s)
Show All Hidden Column(s)
Show Hidden Row(s)/Column(s) in Selection commands, you have to select the surrounding rows/columns first. For instance, if you hide column 3 and want to show it again, select columns 2 and 4, then call the
Show Hidden Column(s) command.
To delete the hidden data, use the
Remove All Filtered Out and Hidden Data command. To save the shown data (i.e. what’s not hidden) into a separate file, use the
Save Visible Data As command.
Miscellaneous Data Manipulation
This section covers the following commands:
You can transpose entire tables or individual ranges.
Transpose Selected Cells
2. Case Conversion
Upper Camel Case
Lower Camel Case
Upper Underscore Case
Lower Underscore Case
3. Joining (Concatenating) Cells
Join Selected Cells Horizontally
Join Selected Cells Vertically
4. Splitting Cells
Split Selected Cells Horizontally
Split Selected Cells Vertically
5. Trimming Cells
You can remove the spaces before and after the non-space characters with
Trim Selected Cell(s).
6. Converting Date/Time Format
You must specify the current date/time format (“From”) and the new date/time format (“To”).
Convert Date/Time Format
Date/Time Format OptionsFor both the “From” and the “To” part, there are several options:
|Enter Custom Format||MMM. d, yyyy h:m ap -> Apr. 10, 2020 8:57 AM||Syntax is described in the program and below.|
|ISO 8601 Format||2020-04-10T08:57:02Z||For “From”, T and Z are optional and milliseconds are allowed. For “To”, the format will be the same as the example.|
|ISO 8601 Format (date only)||2020-04-10|
|Unix Epoch Time (seconds)||1586509063||Number of seconds since January 1, 1970, 00:00:00 UTC (excluding leap seconds).|
|Unix Epoch Time (milliseconds)||1586509063578||Number of milliseconds since January 1, 1970, 00:00:00 UTC (excluding leap seconds).|
|Excel Format||43931.3729166667||Number of days since January 1, 1900.|
Date/Time Custom Format Syntax
The following instructions are shown in the program. Example date/time is April 4, 2020, 5:03:09.372 AM.
|Year||yy (20), yyyy (2020)|
|Month||M (4), MM (04), MMM (Apr), MMMM (April)|
|Day||d (8), dd (08), ddd (Wed), dddd (Wednesday)|
|Hour||h (5), hh (05), H (5, 24 hour clock only), HH (05, 24 hour clock only)|
|Minute||m (3), mm (03)|
|Second||s (9), ss (09)|
|Millisecond||z or zzz (372)|
|AM/PM||AP or A (AM), ap or a (am)|
Use double quotes for text you don’t want parsed. Escape character is \.
Example: yyyy-MM-dd h:mm:ss.zzz AP -> 2020-04-08 5:03:09.372 AM
Some files are very large and you may want to simply view them without having to wait minutes or use up all of your computer’s memory. In such cases, you can open the files in read-only mode. It loads more quickly than edit mode (which already is pretty quick) and uses very little memory.
Though you can’t edit the data, you can sort and filter it. You can’t save the file, but you can save the result of the sorting and filtering to a new file by using the
Save Visible Data As command. This command also works in edit mode.
Read-only mode doesn’t load the file into memory. Rather, it indexes the file so it can quickly find each cell. Any time it needs to read a cell, it references the indexing data and reads it directly from the file on disk.
Note that Modern CSV can handle up to two billion rows or columns (Well, technically it’s 2,147,483,647. It’s a 32-bit thing).
There’s probably no benefit to opening small files in read-only mode unless you want to protect them from accidental editing. At the same time, you probably want to have the option of opening exceptionally large files in read-only mode. For that reason, the
Minimum File Size for Read-Only Mode Query (MB) setting exists. By default, it’s set to 100 MB. That means it will automatically open any file less than 100 MB in edit mode. For larger files, it will ask whether you want to open in edit or read-only mode.
At any time, you can change an already open file back and forth between edit and read-only modes with the
Toggle Read-only command. Note that it will close the file and reload it from scratch in its new mode.
Here are the three preference files and the commands to open them:
1. Settings (
Make your changes in the
User Value. If the
User Value entry is blank, it’ll use the default value. Once you save the file, the changes will immediately apply to all files opened currently or in the future.
Do not change the setting names in the
Setting column. You can, however, move rows and columns as you wish.
Scope column is informative and editing it will make no difference. It tells you whether the command has Global scope or Table scope. With Global scope, changes apply to the whole program immediately. With Table scope, changes only apply to new tables that are created or opened. Changes won’t apply to already opened tables. If you want to change a setting with Table scope on an already open file, open the file and use that setting’s command (see Settings reference here.
Scope column, the
Default Value columns are informative.
2. Keyboard Shorcuts (
Edit Keyboard Shortcuts)
Make your changes in the
User Shortcut. If the
User Shortcut entry is blank, it’ll use the default value. Once you save the file, the changes will immediately apply. The
Default Shortcut column is informative and changing it will make no difference. Do not change the command names in the
Command column. You can, however, move rows and columns as you wish.
3. File Extension Options (
Edit File Extension Options)
In this file, you can define which delimiters, character encodings, and parsing standards are associated with which file extensions. If an extension’s character encoding isn’t defined in this file, it either uses auto-detect if the
Auto-Detect Delimiter setting is true (which it is by default) or it defaults to comma. The delimiter preference set here overrides the
Auto-Detect Delimiter setting. If an encoding isn’t defined, it defaults to UTF-8. If a parsing standard isn’t defined, it defaults to RFC 4180.
In setting the character encoding, you may wish to use the
List Character Encodings command. It’ll list all of the available encodings and if you choose one, it’ll copy it to the clipboard which you can then paste in the
Delimiters and Character Encodings
You can define delimiters and character encodings for a given file extension in the File Extension Options file as described here. The default character encoding for file extensions not defined in the File Extension Options file is UTF-8. If the
Auto-Detect Delimiter feature is turned on (which it is by default), then it automatically detects the delimiter unless the file extension’s delimiter is defined in the File Extension Options file.
You can also change handle delimiters and encodings for individual files. If you need to reload a file and parse it with a different delimiter or character encoding, you can use the
Reload File with Delimiter and
Reload File with Encoding commands. If you want to save the current file with a different delimiter or in a different encoding, you can use the
Set Delimiter for File Save and
Set Encoding for File Save commands. You can access these commands from status bar. Just click on the Delimiter and Encoding labels.
Showing or Hiding UI Features
Changing the Theme
Modern CSV currently has a light theme and a dark theme.
Please contact us if you find a bug, have a question, want to request a new feature, feel like doing us a solid and taking a survey, or for any other reason. All of these options are under the
Contact Us menu or can be invoked with the following commands:
Report a Bug
Request a Feature
Take a Survey
Frequently Asked Questions (FAQ)
How do I filter out all rows with empty cells in a column?
Filter the column using filter phrase !. The ! means “NOT” and there’s emptiness after it, so it means “NOT empty”. You can also filter out non-empty rows by simply leaving the filter phrase blank.
If it appears to leave some rows with empty cells, those cells may have spaces. You can select them and check the cell lengths in the status bar. The
Trim Selected Cell(s) command can remove them.
I filtered a file. How do I save the result to a new file?
Save Visible Data As command. This is new in version 1.3.26, so you’ll need to upgrade if you’re using an older version.
How do I get
Convert Date/Time Filter to work?
You’ll need to enter a format for both the current date/file format and the new one (it does not guess the current format because of the possiblity of mixing up months, days, and years). If you have a custom format, be sure to select the
Enter Custom Format option first.
Also, be sure the “From” format matches the current date/time format. If not, it won’t make any changes.
I made a change to the Settings or Keyboard Shortcuts file but it didn’t stick.
In the Settings file, make sure you set your preference under the
User Value column and not the
Default Value column.
In the Keyboard Shortcuts file, edit the
User Shortcut column rather than the
Default Shortcut column.
Also, be sure to save the file. The settings will apply immediately.
I used the
Set Theme command to change the theme, but it reverted back next session.
That will be fixed shortly. For now, open the Settings file (
Edit Settings command), go down to the row for Theme, and type
dark under the
User Value shortcut. Save the file and the cange will apply immediately (if it doesn’t, reference the previous question).
How do I sort dates and times?
It depends on how your date/time strings are formatted. If they’re in ISO 8601, Unix Epoch, or Excel formats, you can sort them like you would anything else. Likewise if they’re in a format with the following order from left to right: year, month (numbers only, not names), day, hour, minute, AM/PM, second, millisecond.
If they’re in some other format, you can do the following:
- Duplicate the column (
ctrl+alt+cfor Windows and Linux,
- Convert the new column to ISO 8601, Unix Epoch, or Excel format using the
Convert Date/Time Formatcommand.
- Sort the new column.
- Delete the column (
ctrl+shift+Lon Windows and Linux,