Text to Columns

The spreadsheet operation, by its spreadsheet name. Paste text and it becomes a table: split on a comma, a semicolon, a tab, a pipe, two or more spaces, or any custom delimiter you type. Or let it read fixed-width aligned output by finding the column boundaries, which is the case that defeats every whitespace-splitting tool.

Try an example loads an aligned report with a two-word city in it, which is the case that breaks the alternatives.

The fixed-width problem, and why it matters

Here is four lines of the sort of output every mainframe report, every ps aux, every df -h and every legacy .prn export looks like:

Name      Age  City
Ada        36  London
Grace      45  New York
Alan       41  Wilmslow

Three columns. Split it on whitespace and you get four, because New York is two words. Split it on runs of two-or-more spaces and you get three on most lines and two on the Grace line, because the gap between 45 and New is exactly two spaces while the gap inside New York is one. Neither rule can work, because the structure here is not a delimiter at all: it is the character offsets the columns start at.

Fixed-width mode reads it as what it is. It scans every line, finds the character positions where a column boundary is consistent all the way down, and slices there. New York stays one city:

Name,Age,City
Ada,36,London
Grace,45,New York
Alan,41,Wilmslow

Auto mode tries this on its own. Handed the sample above with the layout left on Auto, it reports "read as fixed width, 3 columns detected" and gets it right without being asked.

The custom delimiter

Set the layout to Delimiter, pick Custom from the separator list, and a box appears for the text to split on. It is taken literally and may be any length:

  • ::: the double colon some config exports use.
  • ~ or ^: the separators picked when the data itself contains commas and pipes.
  • | : a pipe with spaces around it, which splits and trims in one go.
  • \t: typed as two characters, read as one tab. \n, \r and \\ work the same way.

There are no quoting rules in custom mode. Every occurrence of the delimiter splits, including one inside what you think of as a value. If your file quotes its fields, it is a CSV, and Auto mode already reads it properly with the quoting honored.

A delimiter that appears on no line is an error rather than a silent one-column result: the page says which delimiter it looked for and suggests switching back to Auto.

The header toggle, and why it is prominent

First row is headers sits in the open on this page rather than below the fold, because in this particular operation it is the decision people get wrong, and getting it wrong is quietly destructive.

Set to Yes, the first line becomes the column names. Set to No, the first line stays as data and the columns are named column_1, column_2 and up. The failure mode is the second case treated as the first: your first data row silently becomes a header, one record vanishes from every count you run afterwards, and nothing about the output looks wrong.

The summary strip states which way it went, every time, so the mistake is visible before you download anything.

What each mode is for

ModeUse it whenHow it decides
Autoyou do not know, or it is an ordinary filetries a real CSV parse first, then delimiter sniffing, then column alignment
Delimiteryou know the separator and detection guessed wrongsplits on exactly what you pick, on every line
Fixed widththe text is aligned into visual columnsfinds character offsets where a boundary holds across all lines

Auto tries a proper CSV parse before anything else, which matters for one specific case: a quoted field containing a line break. Every line-based heuristic breaks on that, because the record spans two lines and neither has the right number of separators. A real parser reads it correctly, so it is tried first whenever the text contains a quote character at all.

Lines with fewer fields than the widest line are padded with empty cells rather than dropped, and the count of padded lines is reported. Silently dropping a short line is the behavior that turns a parsing problem into a data problem three steps later.

Text that arrives as a file

Drop a .txt, .dat, .log, .prn, .csv or .tsv on the box instead of pasting. This is worth knowing because the incumbent tools for this job are paste-only, and the files this operation exists for are exactly the ones too big to paste comfortably: a .prn export from a reporting system, a day of application logs, a fixed-width extract from a bank.

Up to 100 MB, no row limit under that. Past that the widget hands you off to the full editor, which streams the file instead of holding it all at once.

Frequently Asked Questions

Why did my two-word value get split in half?

Because the layout is on a delimiter mode and the delimiter is whitespace, or Auto picked a whitespace rule. Switch the layout to Fixed width. If the text is genuinely aligned into columns, that reads the boundaries by character offset and a value with a space in it stays whole.

What is the difference between this and the text to CSV page?

They share the same reader. This page adds an arbitrary custom delimiter and puts the header toggle in the open, because those are the two things people come looking for when they search for the spreadsheet operation by name. Everything the other page does, this one does.

Can the delimiter be more than one character?

Yes. Choose "Custom" from the separator list and type whatever you like into the box: ::, | , -->​, anything. It is matched literally, so no escaping is needed except for tabs and newlines, which you write as \t and \n.

My file has a quoted field with a comma inside it.

Leave the layout on Auto. It attempts a proper CSV parse before any of the line-based heuristics whenever the text contains a quote character, so quoted fields with commas, and even quoted fields containing line breaks, are read correctly. Custom delimiter mode deliberately applies no quoting rules.

What happens to lines with a different number of fields?

They are padded with empty cells out to the width of the widest line, and the number of padded lines is reported in a note. Nothing is dropped. A ragged line is usually a sign that the delimiter choice is wrong, and the count is the fastest way to notice.

How large a file can I convert?

100 MB dropped as a file, with no row limit under that, and no sign-up or daily quota. Pasting is bounded by what your browser holds in a textarea. Above 100 MB the widget points you at the full editor, which streams rather than loading everything at once.

Does anything I paste leave my computer?

No. There is no upload endpoint on this page and no network request in the code that does the work. JavaScript in your own tab reads the text, processes it and hands back the result. Nothing is stored between visits either, so reloading gives you an empty box again. You can confirm it by opening your browser's network panel and watching it stay quiet while you work.

Text in, table out

Free, no account, no upload. Any delimiter you like, and a fixed-width mode for the ones that have none.

Back to the converter