CSV Viper · Windows · free

Everything CSV
Viper does.

It is a viewer for files that are too big to open. One pass over the file records where every row begins, and after that the size of what you opened stops being your problem. This is the whole of it, in the order you will need it.

1.2 GB
indexed in 2.6 s
8,459,121
rows, no limit
0.8 ms
any screenful
150 KB
of index

Installing and starting it

Run the installer and start CSV Viper from the Start menu. It opens in its own window — no browser tab, no address bar — and everything it does happens on your machine.

Under that window it is a small local web server talking to itself on 127.0.0.1:8143. That is why the window looks like a web page: it is one, served to you by you. Nothing is exposed to the network and nothing goes out.

✓
Closing the window closes the program. There is no tray icon and nothing left running afterwards.

Running from source

If you have the source folder rather than the installer, double-click run.bat. The first run builds a small Python environment beside it, which takes a minute; every run after that is immediate.

Opening a file

Three ways, and the first is the one to use:

Browse

Opens a file browser inside the window — your drives, the folders you have opened files from before, and a box you can paste a path into. It lists one folder at a time and never scans a drive, so it stays instant even on an external USB disk.

Paste a path

The box on the start screen takes a full path. Quotes around it are fine — copying a path from Explorer usually adds them, and they are stripped for you.

Recent files

The start screen lists what you opened before, with its size and row count. A file that has since been moved or deleted is greyed out; the × forgets it.

Inside the browser there is also a Windows picker… button, which opens the standard Windows file dialog. It is the second option rather than the first for a reason: the picker is a window opened on behalf of a background program, and Windows does not always agree to put one of those in front of you.

What happens when you open something enormous

The first screenful appears immediately. Behind it, the file is being scanned, and you can watch that in the status bar: rows found climbs and the percentage rises. You can scroll, search the part that is done, and move columns while it runs.

The second time you open that same file it is instant — the index was saved. If the file has changed since (a different size or timestamp), it is scanned again, because an index that points into rows that have moved is worse than no index at all.

What you are looking at

PartWhat it is
TabsOne per open file. Open as many as you like — an index is about a megabyte, so several large files cost almost nothing to keep open. A spinner means that file is still being scanned.
ToolbarHow the file is being read: delimiter, text encoding, whether row one is a header, and how quotes are treated. Then find, go to row, and the panels.
The gutterThe narrow numbered column on the left. It is the row's real number in the file, which stays true when you filter to search results.
The gridOnly ever holds a screenful. Scroll anywhere in the file and the rows are fetched as they are needed.
Status barFile name and size, row count, column count, and the cell you have selected.
◔
On a very large file the scrollbar covers millions of rows in a few hundred pixels, so one notch of the mouse wheel is always three rows however big the file is. Drag the scrollbar for distance, use the wheel for precision, and Ctrl+G when you know where you are going.

Moving the columns

This is the part you will use most. Vendor files arrive in vendor order, and the column you care about is never the first one.

Drag a header saved per file

Grab any column header and move it

A pink line shows where it will land. Let go and the column moves — and the cells move with it, so you can check you grabbed the right one on the way past.

Resize and fit

The right-hand edge of a header

Drag that edge to resize. Double-click it and the column becomes exactly as wide as the widest thing visible in it — which is usually what you wanted.

The Columns panel

The Columns button, top right

Everything at once, useful when a file has ninety columns and dragging headers would mean scrolling sideways for a minute:

  • The tick box shows or hides a column.
  • 📌 freezes it to the left edge, where it stays while everything else scrolls past. Good for a phone number or an ID.
  • Click the name to rename it. The new name is what an export writes, so a column called c_fname_1 can go out as first_name.
  • Drag a row in the panel to reorder without touching the grid.
  • Show all, Hide all and Reset at the bottom. Reset puts everything back to the file's own order and names.
⌸
Your layout is remembered for that file. Order, widths, hidden columns, pins and renames are saved automatically and come back the next time you open it. They are stored in your own AppData folder — nothing is ever written next to your data.

Finding rows

Type in the Find box and press Enter. The whole file is searched — not the part you have scrolled through — and the grid then shows only the rows that matched, with their real row numbers still in the gutter.

Press Esc, or the clear button beside the hit count, to go back to the whole file.

Two kinds of search

What you asked forHow it runsSpeed
Any column — the defaultReads the file as raw bytes and looks for your text anywhere in the row. No parsing at all.~250 MB/s
One column — chosen in the In dropdownSplits every row into fields so it can look only at the column you named.slower, with progress

Both run in the background with a progress percentage, and both can be left to run while you look at something else. Matching stops at 500,000 rows, which is reported rather than hidden — past that point you are not searching, you are filtering, and an export is the better tool.

⌕
Search is not case sensitive, and a row that matches three times is still one row. What you get back is a list of rows to look at, not a list of hits to count.

Reading one row

Double-click any row — or press the Row button — and it opens in the side panel, one field per line, in your current column order. On a ninety-column record this is the only sane way to read it.

Exporting the view

Moving columns around on screen is only half of what moving columns around means. The other half is a file with the columns in that order, which is what Export writes.

Choose where it goes

A path is filled in for you beside the original. Browse… opens the Windows save dialog if you would rather point at somewhere.

Choose the rows

Every row, the search results only (offered when you have a search running), or a range by row number.

The columns are what you can see

In the order shown, under the names you gave them, without the ones you hid. The panel lists them so you can check before it runs.

Two switches

Whether to write a header row, and whether to add a UTF-8 mark so Excel opens accented characters correctly. Turn the second one on if the file is going to someone who will double-click it.

The export reads forward once, one row at a time, so exporting from a 4 GB file costs 4 GB of reading and no memory to speak of. Progress shows in the status bar, and Cancel stops the job rather than just closing the window.

✓
It writes to a temporary name and renames at the very end, so an interrupted export never leaves behind a file that looks finished. When it is done, the folder opens with the new file selected.

Delimiter, text and headers

Four things are guessed when a file opens, and all four are one control away in the toolbar. The guesses are usually right; when they are not, it is obvious at a glance.

ControlUse it whenCost
DelimEverything is crammed into one column, or split in odd places. Comma, tab, pipe, semicolon and colon.instant
TextAccented characters look like Café. Try Windows-1252, then Latin-1.instant
Header rowYour first row of data is being used as column names, or your headers are showing up as row 1.instant
QuotesThe file's quoting is broken — see below.re-scans the file
⚡
Only the Quotes setting changes where rows begin, so it is the only one that costs a re-scan. Delimiter, encoding and header are re-read from the offsets already known — instant even on a 20 GB file, so changing your mind is free.

Whatever you settle on is remembered for that file, and used instead of the guess next time you open it.

Broken quoting

This is the failure that quietly costs you. One quote character with no partner makes everything after it look like a single enormous field, and the row count silently collapses — a nine-million-row file reports two hundred thousand rows, and nothing looks wrong.

CSV Viper catches it two ways during the scan:

Either one puts an amber bar above the grid saying so, with one button: Read quotes as plain text. That re-reads the file treating " as an ordinary character, which is almost always the right answer for a file that is already broken.

⚠
It is never applied for you. A file with a genuinely enormous quoted field — a note, a document, a blob of JSON in a column — would be damaged by that "fix", splitting on every comma inside it. Only you can tell the two apart, so the button waits for you.

UTF-16 from Excel and SQL

SQL Server Management Studio and Excel both export UTF-16 by default, which stores two bytes per character. Opened directly, every other character looks like a blank.

CSV Viper recognises it before opening and offers a single pass that writes a UTF-8 copy beside the original, then opens that. The original file is not touched, not moved and not deleted.

The copy is named after the original with (utf-8) on the end, so export.csv becomes export (utf-8).csv in the same folder.

The index

Worth two minutes, because everything else follows from it.

A row is a byte offset. One pass over the file records where rows begin, and after that showing row 8,412,006 is one seek and one small read — the same work as showing row 3. That is why file size stops mattering.

Two refinements

Checkpoints, not every row. An offset per row costs eight bytes a row: 80 MB of index for a 10-million-row file. Instead only every Nth offset is kept, with N sized so the forward read from a checkpoint is about 64 KB. The index for 8.46 million rows comes out at 150 KB, and reaching a row is one seek plus a few dozen rows of parsing.

Quote awareness. A newline inside a quoted field is not a row boundary. The scan tracks whether it is inside quotes, in whole 8 MB blocks rather than character by character, so correctness costs no speed. Doubled quotes — "" for a literal quote — add two and so cannot flip the state, which is exactly right.

✓
Tested against a 1.2 GB file with 1,691 newlines inside quoted fields: the row count matched a strict CSV parser exactly, at 8,459,121 both ways.

Where it keeps things

Everything CSV Viper remembers lives in one folder:

%LOCALAPPDATA%\CSVViper\
    indexes\     the saved scan for each file
    layouts\     your column order, widths, pins and renames
    recent.json  the recent files list

Nothing is ever written beside your data. Lead files and discovery exports live on network shares and read-only drives, and a viewer that litters sidecar files in the folder you pointed it at is a viewer you uninstall.

An index is keyed by the file's path, size and timestamp, so a file that has been rewritten simply misses the cache and is scanned again. Deleting the indexes folder is always safe; the only cost is one re-scan.

What things cost

Measured on one file: 1.2 GB of lead data, 8,459,121 rows, 16 columns, on an NVMe SSD. On an external USB disk the same work is bounded by the disk, not by the program.

OperationCostNotes
Index the whole file2.6 s471 MB/s — reads the file once
Open it again laterinstantindex reloaded, not rebuilt
Any screenful, anywhere0.8 msone seek
Search the whole file4.9 s248 MB/s, any column
First rows on screen0.3 swhile the scan is still running
Index on disk150 KBfor 8.46 million rows

Common jobs

Pull one vendor's rows out of a master list

  1. Open the master file.
  2. Type the vendor's name or batch code in Find and press Enter. If the code could appear in more than one column, pick the right one in the In dropdown.
  3. The grid now shows only those rows. Check a few.
  4. Export → Search results only.

Reshape a file for someone else's import template

  1. Drag the headers into the order their template wants.
  2. Hide the columns they do not accept.
  3. Rename the ones whose names have to match theirs.
  4. Export → Every row, with a header row, and the Excel mark on if a person rather than a system will open it.

Check what is actually in the middle of a huge file

Ctrl+G, type the row number, press Enter. Vendors have been known to change their format halfway through an export, and row 4,000,001 is where you find out.

Make an SSMS export usable

Open it, accept the UTF-16 conversion, and work with the UTF-8 copy it makes. Delete the original once you are happy.

Keyboard

KeysWhat it does
Ctrl+FJump to the Find box
Ctrl+GGo to a row number
Ctrl+CCopy the selected cell
Ctrl+Home / EndFirst / last row of the file
↑ ↓ ← →Move the selected cell
Home / EndFirst / last column
PgUp / PgDnA screenful at a time
EscClear the search filter, or close a dialog
Double-click a rowOpen it in the side panel, one field per line
Double-click a header edgeFit that column to its contents

When something looks wrong

The row count looks far too low

Look for the amber bar above the grid. The file's quoting is broken and everything after a stray quote is being read as one value. Press Read quotes as plain text.

Every field is in one column

Wrong delimiter. Change Delim in the toolbar — it costs nothing and applies immediately.

Accented characters are mangled

Café means the file is not UTF-8. Switch Text to Windows-1252, which is what Excel on an English Windows machine produces.

My headers are showing as row 1 — or my first row of data is being used as headers

Toggle Header row.

The Windows file picker does not appear

Use the built-in browser instead — it is the Browse button's normal behaviour and cannot fail to show up. Windows does not always allow a program running in the background to put a dialog in front of you, which is exactly why the built-in one is the default.

Indexing is slow

The scan reads the file once, so it runs at whatever the disk gives. On an external USB drive a gigabyte takes as long as that drive takes to hand over a gigabyte, and nothing can make it faster. It only happens once per file.

I edited the file and now the numbers look stale

They will not be. The saved index is keyed to the file's size and timestamp, so an edited file misses the cache and is scanned again automatically.

What it deliberately does not do

Sort

Sorting a multi-gigabyte file honestly means building a second index keyed on a column — a bigger piece of work than the rest of the viewer put together. Pretending otherwise would mean loading the file into memory, which is the thing this program exists to avoid. Search, filter-to-matches and go-to-row cover most of what sorting gets used for.

Edit cells

It is a viewer. The only thing it ever writes is an export you asked for, to a new file. Your original is never opened for writing at all.

Formulas, charts, pivot tables

That is a spreadsheet, and there is a good one already. This is for the files that one refuses to open.