Merge Spreadsheets
This utility can merge two spreadsheets (as csv files) that have a matching column. The matching column must appear first file on both spreadsheets, but they do not have to have the same number of rows. The code loops through each row in the first, searching for a match in the second file, so the resulting merged file will be the same length as the first.
Convert at CSV File to a DATABASE

Click here to download files
MERGE/index.php ▾
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CSV-DATABASE </title>
<link rel="stylesheet" href = 'inc/style.css'>
</head>
<body>
<main>
<header>
<br><br><a href = '../../merge-spreadsheets'>← Return</a><br><br>
<h2><a href = 'index.php'>Merge Spreadsheets</a></h2>
</header>
<main>
<?php
$csv1array = $csv2array = $csv3array = array();
$folders = array ('data/csv1', 'data/csv2', 'data/csv3');
foreach ($folders as $folder) {
//Remove previous records
$array1 = scandir ($folder);
foreach ($array1 as $item1) {
if (substr ($item1, 0, 1) !== '.') {
unlink ($folder . '/' . $item1);
}
}
}
require ("inc/functions.php");
if ($_SERVER ["REQUEST_METHOD"] == "POST") {
if (isset ($_POST['submit-csv'])) {
//If no input, use default CSV file
copy ('data/Felinia-addresses.csv', 'temp.csv');
if ($_FILES['uploadfile1']['name'] !== ''){
$imagebase = $_FILES['uploadfile1']['name'];
$imagename = pathinfo ($imagebase, PATHINFO_FILENAME);
$extension = strtolower (pathinfo ($imagebase, PATHINFO_EXTENSION));
if($extension === 'csv' ) {
$fileTmpName = $_FILES['uploadfile1']['tmp_name'];
move_uploaded_file($fileTmpName, 'temp.csv');
}
}
$folder = 'data/csv1';
include ('inc/create-records.php');
$numberOfCells = count ($spreadsheetkeys);
echo "<br><br>Spreadsheet 1: " . $count . ' records ';
//If no input, use default CSV file
copy ('data/Felinia-vehicles.csv', 'temp.csv');
if ($_FILES['uploadfile2']['name'] !== ''){
$imagebase = $_FILES['uploadfile2']['name'];
$imagename = pathinfo ($imagebase, PATHINFO_FILENAME);
$extension = strtolower (pathinfo ($imagebase, PATHINFO_EXTENSION));
if($extension === 'csv' ) {
$fileTmpName = $_FILES['uploadfile2']['tmp_name'];
move_uploaded_file($fileTmpName, 'temp.csv');
}
}
$folder = 'data/csv2';
include ('inc/create-records.php');
echo "Spreadsheet 2: " . $count . ' records';
}
include ('inc/create-merged-file.php');
include ('inc/create-csv.php');
if (file_exists ('temp.csv')) {
unlink ('temp.csv');
}
}
?>
<h4>Choose 2 CSV files - must have a common first column</h4>
<form action="index.php" method="post" enctype="multipart/form-data">
<label for = 'uploadfile1'>csv file 1</label>
<input id = 'uploadfile1' type="file" name="uploadfile1" /><br><br>
<label for = 'uploadfile2'>csv file 2</label>
<input id = 'uploadfile2' type="file" name="uploadfile2" /><br><br>
<br><br>
<input class = 'submitbutton' type = 'submit' name = 'submit-csv' value = 'Enter' />
</form>
</main>
</body>
</html>MERGE/inc
create-csv.php ▾
<?php
$csv3array = getRecordIdsFromFolder ('data/csv3');
$file = fopen("data/merged.csv","w");
foreach ($csv3array as $item1) {
$string = file_get_contents ('data/csv3/' . $item1 .'.txt');
$entryarray = explode (',', $string);
fputcsv($file, $entryarray);
}
fclose($file);
echo "<br><br><a href = 'data/merged.csv'>Download Merged CSV</a>";
?> create-merged-file.php ▾
<?php
//Remove previous records
$array1 = scandir ('data/csv3');
foreach ($array1 as $item1) {
if (substr ($item1, 0, 1) !== '.') {
unlink ('data/csv3/' . $item1);
}
}
$array1 = getRecordIdsFromFolder ('data/csv1');
$array2 = getRecordIdsFromFolder ('data/csv2');
$array3 = array();
foreach ($array1 as $item1) {
$string1 = $string3 = file_get_contents ('data/csv1/' . $item1 . '.txt');
if (file_exists ('data/csv2/' . $item1 . '.txt')) {
$string2 = file_get_contents ('data/csv2/' . $item1 . '.txt');
$string3 .= ',' .$string2;
}
else {
//fill in empty cells
for ($i = 0; $i < $numberOfCells; $i ++) {
$string3 .= ',x';
}
}
file_put_contents ('data/csv3/' . $item1 . '.txt', $string3);
}
?> create-records.php ▾
<?php
//Remove previous records
$array1 = scandir ($folder);
foreach ($array1 as $item1) {
if (substr ($item1, 0, 1) !== '.') {
unlink ($folder . '/' . $item1);
}
}
$file = fopen('temp.csv',"r");
$error = false;
$spreadsheetkeys = array();
$count = 0;
while(! feof($file) ){
$array1 = fgetcsv($file);
if ($array1) {
$count++;
if ($count === 1) {
foreach ($array1 as $item1) {
$item1 = preg_replace('/[^A-Za-z0-9-?!,\s\/]/', '', $item1);
$item1 = str_replace (' ', '', $item1);
$item1 = strtolower($item1);
array_push ($spreadsheetkeys, $item1);
}
}
else {
//create a temporary record with values in the order of the original csv file
$recordid = $array1[0];
$recordid = str_replace (' ', '', $recordid);
$recordid = strtolower ($recordid);
$recordstring = implode (',', $array1);
file_put_contents ($folder . '/' . $recordid . '.txt', $recordstring);
}
}
}
//print_r ($csvarray);
fclose($file);
?>
functions.php ▾
<?php
function createRecordId ($name) {
$newname = "";
if ($name !== "") {
$newname = trim ($name);
$newname = str_replace (" " , "-", $newname);
$newname = strtolower ($newname);
$newname = preg_replace('/[^A-Za-z0-9-]/', '', $newname);
$newname = preg_replace('/-+/', '-', $newname);
}
return $newname;
}
function initializeRecord ($keys){
$record = array ();
foreach ($keys as $Id => $key) {
$record[$key] = "";
}
return ($record);
}
function readDatabaseRecord ($keys, $filename) {
//Creates 'record' variable by assigning keys and values to associative array,
global $dl1;
//Assigns null values to keys
$record = array();
foreach ($keys as $Id => $key) {
$record[$key] = "";
}
//If string found, assign string values to keys
if ($filename && file_exists($filename)) {
$string = file_get_contents ($filename);
$Array1= explode ($dl1, $string);
foreach ($keys as $Id => $key) {
if (array_key_exists ($Id, $Array1)) {
$record [$key] = $Array1[$Id];
}
}
}
return $record;
}
//stores array as text file
function writeDatabaseRecord ($record, $filename) {
global $dl1;
$String = implode ($dl1, $record);
file_put_contents ($filename, $String);
}
function createAssocArray ($map) {
global $dl1, $dl2;
$assocarray = array();
$Array1 = readArray ($map, $dl1);
foreach ($Array1 as $Id => $Item1) {
$Array2 = explode ($dl2, $Item1);
$key = $Array2[0];
if (array_key_exists (1, $Array2)) {
$value = $Array2[1];
$assocarray[$key] = $value;
}
}
return $assocarray;
}
function createAssocArrayReverse ($map) {
global $dl1, $dl2;
$assocarray = array();
$Array1 = readArray ($map, $dl1);
foreach ($Array1 as $Id => $Item1) {
$Array2 = explode ($dl2, $Item1);
if (array_key_exists (1, $Array2)) {
$key = $Array2[1];
$value = $Array2[0];
$assocarray[$key] = $value;
}
}
return $assocarray;
}
// Maps for table relationships
function addMapEntry ($map, $key1, $key2) {
global $dl1, $dl2;
$Array1 = readArray ($map, $dl1);
$newentry = $key1 . $dl2 . $key2 . $dl2 . "\n";
array_push ($Array1, $newentry);
$Array1 = array_unique ($Array1);
sort ($Array1);
writeArray ($map, $Array1, $dl1);
}
function removeMapEntries ($map, $key0, $key1) {
//Remove entries containing either or both key0 and key1
global $dl1, $dl2;
$Array1 = readArray ($map, $dl1);
foreach ($Array1 as $Id => $Item1) {
$Array2 = explode ($dl2, $Item1);
if (array_key_exists (0, $Array2) && array_key_exists (1, $Array2)) {
if ($key0 && $key1 ) {
if ( $Array2[0] === $key0 && $Array2[1] === $key1 ) {
unset ($Array1 [$Id]);
}
}
else if (! $key0 && $key1 ) {
if ($Array2[1] === $key1) {
unset ($Array1 [$Id]);
}
}
else if ($key0 && !$key1) {
if ($Array2[0] === $key0) {
unset ($Array1 [$Id]);
}
}
}
}
writeArray ($map, $Array1, $dl1);
}
function selectMapEntries ($map, $key0, $key1) {
//for many-to-many relationships
//returns an array with selected key
global $dl1, $dl2;
$Array1 = readArray ($map, $dl1);
$selectedarray = array();
if ($key0 && !$key1 ) {
foreach ($Array1 as $Item1) {
$Array2 = explode ($dl2, $Item1);
if (array_key_exists (1, $Array2)) {
if ($Array2[0] == $key0 ){
array_push ($selectedarray, $Array2[1]);
}
}
}
}
else if (!$key0 && $key1) {
foreach ($Array1 as $Item1) {
$Array2 = explode ($dl2, $Item1);
if (array_key_exists (1, $Array2)) {
if ($Array2[1] === $key1) {
array_push ($selectedarray, $Array2[0]);
}
}
}
}
return $selectedarray;
}
function selectMapKey ($map, $key0, $key1) {
//For one-to-many relationships
//returns an single value
global $dl1, $dl2;
$returnvalue = '';
$Array1 = readArray ($map, $dl1);
foreach ($Array1 as $Id => $Item1) {
$Array2 = explode ($dl2, $Item1);
if ( array_key_exists (1, $Array2)) {
if (!$key0 && $key1) {
if ($Array2[1] === $key1) {
$returnvalue = $Array2[0];
break;
}
}
else if ($key0 && ! $key1) {
if ($Array2[0] === $key0){
$returnvalue = $Array2[1];
break;
}
}
}
}
return $returnvalue;
}
function extractFromMap($map, $key) {
//returns a new array of either the the first or second columns
global $dl1, $dl2;
$selectedarray = array();
$Array1 = readArray ($map, $dl1);
foreach ($Array1 as $Item1) {
$Array2 = explode ($dl2, $Item1);
if ($key == 0) {
array_push ($selectedarray, $Array2[0]);
}
else if ($key == 1) {
if (array_key_exists (1, $Array2)) {
array_push ($selectedarray, $Array2[1]);
}
}
}
return $selectedarray;
}
function moveToTrash ($table, $recordid) {
$oldfilename = 'data/' . $table . '/' . $recordid . '.txt';
$newfilename = 'data/trash/' . $table . '----' . $recordid . '.txt';
if (file_exists ($oldfilename)) {
rename ($oldfilename, $newfilename);
}
}
function restoreFromTrash ($filename) {
$oldfilename = 'data/trash/' . $filename;
if (file_exists ($oldfilename)) {
$array2 = explode ('----', $filename);
if (array_key_exists (1, $array2)) {
$filename = str_replace ('----', '', $array2[1]);
$table = $array2[0];
$newfilename = 'data/' . $table . '/' . $filename;
rename ($oldfilename, $newfilename);
}
}
}
//ARRAYS
function readArray ($filename, $delimiter){
$Array1 = array();
if (file_exists($filename)) {
$String = file_get_contents ($filename);
$String = trim ($String, $delimiter);
if ($String !== "") {
$Array1 = explode ($delimiter, $String);
}
}
return $Array1;
}
function writeArray ($filename, $array, $delimiter){
$String = implode ($delimiter, $array);
file_put_contents ($filename, $String);
}
function addNameToArray ($filename, $name, $delimiter) {
if (file_exists($filename)) {
$String = file_get_contents ($filename);
$Array1 = explode ($delimiter, $String);
array_push ($Array1, $name);
$Array1 = array_unique ($Array1);
sort ($Array1);
$String = implode ($delimiter, $Array1);
$String = preg_replace('/,+/', ',', $String);
$String = ltrim ($String, $delimiter);
file_put_contents ($filename, $String);
}
}
function removeNameFromArray ($filename, $name, $delimiter) {
if (file_exists($filename)) {
$String = file_get_contents ($filename);
$Array = explode ($delimiter, $String);
foreach ($Array as $Id => $Item) {
$Item = trim ($Item);
if ($Item === $name) {
unset ($Array [$Id]);
}
}
array_values ($Array);
sort ($Array);
$String = implode ($delimiter, $Array);
file_put_contents ($filename, $String);
}
}
//Validate 'GET' value
function getFromQueryString ($label) {
$value = "";
if (isset ($_GET[$label])) {
$value = $_GET[$label];
if (specialChars($value) || strlen ($value) > 300) {
//Invalid input
$value = '';
}
}
return $value;
}
//Filter input text for record delimiters
function sanitizeFormInput($text) {
global $dl1, $dl2;
$text = trim($text);
$text = str_replace ($dl1, '', $text);
$text = str_replace ($dl2, '', $text);
return $text;
}
function showWords ($text) {
$fancytext = str_replace (',', ', ', $text);
$fancytext = ucwords (str_replace ('-', ' ', $fancytext));
return $fancytext;
}
function assignPostValuesToRecord ($postarray, $keys) {
//Assign values to record
$record = array();
foreach ($keys as $Id => $key) {
$record[$key] = "";
if (isset ($postarray[$key])) {
if (!is_array ($postarray[$key])) {
$record[$key] = sanitizeFormInput ($postarray[$key]);
}
}
}
return $record;
}
function saveToLog ($text) {
global $dl1, $dl2;
$currenttime = date ("h-i:sa");
$date = date ("Y-m-d");
$filename = 'data/log.txt';
$String = file_get_contents ($filename);
$String = $String . "\n\n " . $date . " " . $currenttime . " ". $text;
file_put_contents ($filename, $String);
}
function formatDate ($inputdate) {
$returndate = '';
if (is_numeric (substr ($inputdate, 0,4))) {
//format yyyy/mm/dd
$month = substr ($inputdate, 5, 2);
$day = substr ($inputdate, 8,2);
$year = substr ($inputdate, 0, 4);
$returndate = $year . '-' . $month . '-' . $day;
}
else if (is_numeric (substr ($inputdate, 0, 2))) {
//Year is last mm/dd/yyyy
$month = substr ($inputdate, 0, 2);
$day = substr ($inputdate, 3,2);
$year = substr ($inputdate, 6, 4);
$returndate = $year . '-' . $month . '-' . $day;
}
else {
//default current date
$returndate = date('Y-m-d');
}
return $returndate;
}
//CHECK FOR DUPLICATE EMAILS
function checkForDuplicateEmail ($sendtoemail, $message) {
global $dl1, $dl2;
$error = false;
$emailarchive = readArray ('data/email-archive.txt', $dl1);
$emailentry = date ("Y-m-d") . $dl2 .$sendtoemail . $dl2 . $message . "\n";
if ( in_array ($emailentry, $emailarchive)) {
$error = true;
echo "<div class = 'error'>Message is a duplicate</div>";
}
else {
array_push ( $emailarchive, $emailentry);
$String = implode ($dl1, $emailarchive);
file_put_contents ('data/email-archive.txt', $String);
}
return $error;
}
function specialChars($str) {
global $dl1, $dl2;
//return preg_match("/[^a-zA-Z0-9-:!?*'@#$,\.\s\)\(]/", $str) > 0;
if (strpos ($str, "<") !== false || strpos ($str, ">") !== false | strpos ($str, $dl1) !== false | strpos ($str, $dl2) !== false ) {
return true;
}
}
function notPhoneNumber($str) {
return preg_match('/[^0-9-\)\(\s]/', $str) > 0;
}
function getRecordIdsFromFolder ($folder) {
if (file_exists ($folder)) {
$Newarray = array();
$Array1 = scandir ($folder);
foreach ($Array1 as $Item1) {
if (substr ($Item1, 0, 1) !== '.') {
$Recordid = str_replace (".txt", "", $Item1);
$Recordid = str_replace ('.php', '', $Recordid);
$Recordid = str_replace ('.css', '', $Recordid);
$Recordid = trim ($Recordid);
array_push ($Newarray, $Recordid);
}
}
return $Newarray;
}
}
?>
style.css ▾
body {
font-size: 16px;
margin: 0 auto;
font-family: "Arial", sans-serif;
font-size: 16px;
box-sizing: border-box;
color: black;
width: 500px;
}
h1, h2, h3 {
text-align: center;
color: #186c99;
margin: 5px auto;
}
h1 {
margin-bottom: 5px;
}
h3, h4 {
color: #186c99;
}
a {
text-decoration: none;
color:#652c77;
}
a:hover {
color: darkmagenta;
}
/** Header */
.headerwrap {
text-align: center;
}
/** Main */
main {
text-align: center;
}
MERGE/data
Felinia-addresses.csv ▾
Streetname,LASTNAME,FIRSTNAME1,EMAIL,Orders
3 Cheeseburger Circle,Gigglesnark,Henrietta,Hgiggle@meowmail.com,
5 Cheeseburger Circle,Dieter,Isley,BNFeliniov@catmail.com,
1 Cheeseburger Circle,Dieter,Ralph,BitPan16@meowmail.com,
7 Cheeseburger Circle,Softpaw,Mittens,HRod19@catmail.com,
4 Cheeseburger Circle,Feliniov,Boris,Aarmstrong@meowmail.com,
4 Cheeseburger Circle,Pantherson,Bitsy,GRachio618@meowmail.com,
2 Cheeseburger Circle,Softpaw,Blackie,IsleyD@meowmail.com,
9 Cheeseburger Circle,Armstrong,Mercedes,Ralph@meowmail.com,
8 Feathertoy Circle,Chaserson,Prissy,MittensS@purrmail.com,
9 Feathertoy Circle,Snowball,Larry,BlackieSoftpaw@meowmail.com,
7 Feathertoy Circle,Kerspeckles,Wilhelmina,MerArm67@meowmail.com,
1 Hideaway Court,Ritzsimmons,Mitzy,Prissy1@purrmail.com,
2 Hideaway Court,Rodgers,Willow,LarryLucySnow@meowmail.com,
3 Hideaway Court,Rodgers,Squeekie,WKersp671@catmail.com,
6 Feathertoy Circle,Rodgers,Holly,Mitzy55@catmail.com,
5 Feathertoy Circle,Twitchitail,Tom,WRod22@catmail.com,
4 Feathertoy Circle,Rodgers,Tanster,SqueekRod@meowmail.com,
3 Feathertoy Circle,Pantherson,Peter,Twitch17@purrmail.com,
2 Feathertoy Circle,Cat,Kitty,TanROd@meowmail.com,
1 Longtail Court,Patterson,Princess,PeterP@purrmail.com,
2 Longtail Court,Softpaw,Simkin,KC6722@purrmail.com,
3 Longtail Court,Cat,Baby,PrincessP@catmail.com,
4 Longtail Court,Calico,Gordon,SSoft2525@purrmail.com,
1 Lower Treetrunk Drive,Cat,Bob,BC4938@meowmail.com,
2 Lower Treetrunk Drive,Patterson,Catzilla,GOCalico414@catmail.com,
3 Lower Treetrunk Drive,Feliniov,Ivan ,bobcat772@catmail.com,
1 Mousetail Blvd,Armstrong,Antonio,CatzillaP@catmail.com,
2 Mousetail Blvd,Pawclaw,Martin,ICFeliniov18@catmail.com,
3 Mousetail Blvd,Bluewhisker,Josephina,MBPawclaw@catmail.com,
4 Mousetail Blvd,Rodgers,Scottie,Jblue222@meowmail.com,
5 Mousetail Blvd,Patterson,Pinkie,Scotrod78@catmail.com,
6 Mousetail Blvd,Cat,Bunny,PinkieP@purrmail.com,
7 Mousetail Blvd,Patterson,Pinkie,BunnC25@catmail.com,
8 Mousetail Blvd,Shaggyback,Snow,SardinesRUS@catmail.com,
9 Mousetail Blvd,Sheddington,Fluffy,Sshaggy@catmail.com,
4 Lower Treetrunk Drive,Rachio,Goldy,Fluffy1@purrmail.com,
5 Lower Treetrunk Drive,Jones,Cleopatra,Cleo30BC@catmail.com,
6 Lower Treetrunk Drive,Thagorus,Py,PyThag314@meowmail.com,
7 Lower Treetrunk Drive,Mewton,Isaac,IMew1790@purrmail.com,
3 Pasatuna Avenue,Dribble,Rocco,Rocco1@meowmail.com,
4 Pasatuna Avenue,Frankenfluff,Buttons,Buttons1@purrmail.com,
2 Pasatuna Avenue,Rockafurrer,Mimi,Mimimi@catmail.com,
Felinia-vehicles.csv ▾
Streetname,Vehicle
4 Lower Treetrunk Drive,feet
5 Lower Treetrunk Drive,golf cart
6 Lower Treetrunk Drive,vimana
7 Lower Treetrunk Drive,donkey cart
3 Pasatuna Avenue,horse and buggy
4 Pasatuna Avenue,train
2 Pasatuna Avenue,pontoon boat
3 Cheeseburger Circle,airplane
5 Cheeseburger Circle,raft
1 Cheeseburger Circle,hot air balloon
7 Cheeseburger Circle,bicycle
4 Cheeseburger Circle,airplane
2 Cheeseburger Circle,buick
9 Cheeseburger Circle,golf cart
8 Feathertoy Circle,dirigible
9 Feathertoy Circle,flying saucer
7 Feathertoy Circle,roller skates
2 Hideaway Court,hot air balloon
3 Hideaway Court,scooter
6 Feathertoy Circle,scooter
5 Feathertoy Circle,drone
4 Feathertoy Circle,golf cart
3 Feathertoy Circle,pogo stick
2 Feathertoy Circle,magic dust
1 Longtail Court,flying carpet
2 Longtail Court,rocket
3 Longtail Court,honda
4 Longtail Court,canoe
1 Lower Treetrunk Drive,kayak
2 Lower Treetrunk Drive,horse
1 Mousetail Blvd,vimana
2 Mousetail Blvd,golf cart
3 Mousetail Blvd,dune buggy
4 Mousetail Blvd,bobsled
5 Mousetail Blvd,snow shoes
6 Mousetail Blvd,dog sled
7 Mousetail Blvd,chariot
8 Mousetail Blvd,wings
9 Mousetail Blvd,levitation
csv1 ▾
1cheeseburgercircle.txt
1hideawaycourt.txt
1longtailcourt.txt
1lowertreetrunkdrive.txt
1mousetailblvd.txt
2cheeseburgercircle.txt
2feathertoycircle.txt
2hideawaycourt.txt
2longtailcourt.txt
2lowertreetrunkdrive.txt
2mousetailblvd.txt
2pasatunaavenue.txt
3cheeseburgercircle.txt
3feathertoycircle.txt
3hideawaycourt.txt
3longtailcourt.txt
3lowertreetrunkdrive.txt
3mousetailblvd.txt
3pasatunaavenue.txt
4cheeseburgercircle.txt
4feathertoycircle.txt
4longtailcourt.txt
4lowertreetrunkdrive.txt
4mousetailblvd.txt
4pasatunaavenue.txt
5cheeseburgercircle.txt
5feathertoycircle.txt
5lowertreetrunkdrive.txt
5mousetailblvd.txt
6feathertoycircle.txt
6lowertreetrunkdrive.txt
6mousetailblvd.txt
7cheeseburgercircle.txt
7feathertoycircle.txt
7lowertreetrunkdrive.txt
7mousetailblvd.txt
8feathertoycircle.txt
8mousetailblvd.txt
9cheeseburgercircle.txt
9feathertoycircle.txt
9mousetailblvd.txt
1hideawaycourt.txt
1longtailcourt.txt
1lowertreetrunkdrive.txt
1mousetailblvd.txt
2cheeseburgercircle.txt
2feathertoycircle.txt
2hideawaycourt.txt
2longtailcourt.txt
2lowertreetrunkdrive.txt
2mousetailblvd.txt
2pasatunaavenue.txt
3cheeseburgercircle.txt
3feathertoycircle.txt
3hideawaycourt.txt
3longtailcourt.txt
3lowertreetrunkdrive.txt
3mousetailblvd.txt
3pasatunaavenue.txt
4cheeseburgercircle.txt
4feathertoycircle.txt
4longtailcourt.txt
4lowertreetrunkdrive.txt
4mousetailblvd.txt
4pasatunaavenue.txt
5cheeseburgercircle.txt
5feathertoycircle.txt
5lowertreetrunkdrive.txt
5mousetailblvd.txt
6feathertoycircle.txt
6lowertreetrunkdrive.txt
6mousetailblvd.txt
7cheeseburgercircle.txt
7feathertoycircle.txt
7lowertreetrunkdrive.txt
7mousetailblvd.txt
8feathertoycircle.txt
8mousetailblvd.txt
9cheeseburgercircle.txt
9feathertoycircle.txt
9mousetailblvd.txt
csv2 ▾
1cheeseburgercircle.txt
1longtailcourt.txt
1lowertreetrunkdrive.txt
1mousetailblvd.txt
2cheeseburgercircle.txt
2feathertoycircle.txt
2hideawaycourt.txt
2longtailcourt.txt
2lowertreetrunkdrive.txt
2mousetailblvd.txt
2pasatunaavenue.txt
3cheeseburgercircle.txt
3feathertoycircle.txt
3hideawaycourt.txt
3longtailcourt.txt
3mousetailblvd.txt
3pasatunaavenue.txt
4cheeseburgercircle.txt
4feathertoycircle.txt
4longtailcourt.txt
4lowertreetrunkdrive.txt
4mousetailblvd.txt
4pasatunaavenue.txt
5cheeseburgercircle.txt
5feathertoycircle.txt
5lowertreetrunkdrive.txt
5mousetailblvd.txt
6feathertoycircle.txt
6lowertreetrunkdrive.txt
6mousetailblvd.txt
7cheeseburgercircle.txt
7feathertoycircle.txt
7lowertreetrunkdrive.txt
7mousetailblvd.txt
8feathertoycircle.txt
8mousetailblvd.txt
9cheeseburgercircle.txt
9feathertoycircle.txt
9mousetailblvd.txt
1longtailcourt.txt
1lowertreetrunkdrive.txt
1mousetailblvd.txt
2cheeseburgercircle.txt
2feathertoycircle.txt
2hideawaycourt.txt
2longtailcourt.txt
2lowertreetrunkdrive.txt
2mousetailblvd.txt
2pasatunaavenue.txt
3cheeseburgercircle.txt
3feathertoycircle.txt
3hideawaycourt.txt
3longtailcourt.txt
3mousetailblvd.txt
3pasatunaavenue.txt
4cheeseburgercircle.txt
4feathertoycircle.txt
4longtailcourt.txt
4lowertreetrunkdrive.txt
4mousetailblvd.txt
4pasatunaavenue.txt
5cheeseburgercircle.txt
5feathertoycircle.txt
5lowertreetrunkdrive.txt
5mousetailblvd.txt
6feathertoycircle.txt
6lowertreetrunkdrive.txt
6mousetailblvd.txt
7cheeseburgercircle.txt
7feathertoycircle.txt
7lowertreetrunkdrive.txt
7mousetailblvd.txt
8feathertoycircle.txt
8mousetailblvd.txt
9cheeseburgercircle.txt
9feathertoycircle.txt
9mousetailblvd.txt
csv3 ▾
1cheeseburgercircle.txt
1hideawaycourt.txt
1longtailcourt.txt
1lowertreetrunkdrive.txt
1mousetailblvd.txt
2cheeseburgercircle.txt
2feathertoycircle.txt
2hideawaycourt.txt
2longtailcourt.txt
2lowertreetrunkdrive.txt
2mousetailblvd.txt
2pasatunaavenue.txt
3cheeseburgercircle.txt
3feathertoycircle.txt
3hideawaycourt.txt
3longtailcourt.txt
3lowertreetrunkdrive.txt
3mousetailblvd.txt
3pasatunaavenue.txt
4cheeseburgercircle.txt
4feathertoycircle.txt
4longtailcourt.txt
4lowertreetrunkdrive.txt
4mousetailblvd.txt
4pasatunaavenue.txt
5cheeseburgercircle.txt
5feathertoycircle.txt
5lowertreetrunkdrive.txt
5mousetailblvd.txt
6feathertoycircle.txt
6lowertreetrunkdrive.txt
6mousetailblvd.txt
7cheeseburgercircle.txt
7feathertoycircle.txt
7lowertreetrunkdrive.txt
7mousetailblvd.txt
8feathertoycircle.txt
8mousetailblvd.txt
9cheeseburgercircle.txt
9feathertoycircle.txt
9mousetailblvd.txt
1hideawaycourt.txt
1longtailcourt.txt
1lowertreetrunkdrive.txt
1mousetailblvd.txt
2cheeseburgercircle.txt
2feathertoycircle.txt
2hideawaycourt.txt
2longtailcourt.txt
2lowertreetrunkdrive.txt
2mousetailblvd.txt
2pasatunaavenue.txt
3cheeseburgercircle.txt
3feathertoycircle.txt
3hideawaycourt.txt
3longtailcourt.txt
3lowertreetrunkdrive.txt
3mousetailblvd.txt
3pasatunaavenue.txt
4cheeseburgercircle.txt
4feathertoycircle.txt
4longtailcourt.txt
4lowertreetrunkdrive.txt
4mousetailblvd.txt
4pasatunaavenue.txt
5cheeseburgercircle.txt
5feathertoycircle.txt
5lowertreetrunkdrive.txt
5mousetailblvd.txt
6feathertoycircle.txt
6lowertreetrunkdrive.txt
6mousetailblvd.txt
7cheeseburgercircle.txt
7feathertoycircle.txt
7lowertreetrunkdrive.txt
7mousetailblvd.txt
8feathertoycircle.txt
8mousetailblvd.txt
9cheeseburgercircle.txt
9feathertoycircle.txt
9mousetailblvd.txt
merged.csv ▾
"1 Cheeseburger Circle",Dieter,Ralph,BitPan16@meowmail.com,,"1 Cheeseburger Circle","hot air balloon"
"1 Hideaway Court",Ritzsimmons,Mitzy,Prissy1@purrmail.com,,x,x,x,x,x
"1 Longtail Court",Patterson,Princess,PeterP@purrmail.com,,"1 Longtail Court","flying carpet"
"1 Lower Treetrunk Drive",Cat,Bob,BC4938@meowmail.com,,"1 Lower Treetrunk Drive",kayak
"1 Mousetail Blvd",Armstrong,Antonio,CatzillaP@catmail.com,,"1 Mousetail Blvd",vimana
"2 Cheeseburger Circle",Softpaw,Blackie,IsleyD@meowmail.com,,"2 Cheeseburger Circle",buick
"2 Feathertoy Circle",Cat,Kitty,TanROd@meowmail.com,,"2 Feathertoy Circle","magic dust"
"2 Hideaway Court",Rodgers,Willow,LarryLucySnow@meowmail.com,,"2 Hideaway Court","hot air balloon"
"2 Longtail Court",Softpaw,Simkin,KC6722@purrmail.com,,"2 Longtail Court",rocket
"2 Lower Treetrunk Drive",Patterson,Catzilla,GOCalico414@catmail.com,,"2 Lower Treetrunk Drive",horse
"2 Mousetail Blvd",Pawclaw,Martin,ICFeliniov18@catmail.com,,"2 Mousetail Blvd","golf cart"
"2 Pasatuna Avenue",Rockafurrer,Mimi,Mimimi@catmail.com,,"2 Pasatuna Avenue","pontoon boat"
"3 Cheeseburger Circle",Gigglesnark,Henrietta,Hgiggle@meowmail.com,,"3 Cheeseburger Circle",airplane
"3 Feathertoy Circle",Pantherson,Peter,Twitch17@purrmail.com,,"3 Feathertoy Circle","pogo stick"
"3 Hideaway Court",Rodgers,Squeekie,WKersp671@catmail.com,,"3 Hideaway Court",scooter
"3 Longtail Court",Cat,Baby,PrincessP@catmail.com,,"3 Longtail Court",honda
"3 Lower Treetrunk Drive",Feliniov,"Ivan ",bobcat772@catmail.com,,x,x,x,x,x
"3 Mousetail Blvd",Bluewhisker,Josephina,MBPawclaw@catmail.com,,"3 Mousetail Blvd","dune buggy"
"3 Pasatuna Avenue",Dribble,Rocco,Rocco1@meowmail.com,,"3 Pasatuna Avenue","horse and buggy"
"4 Cheeseburger Circle",Pantherson,Bitsy,GRachio618@meowmail.com,,"4 Cheeseburger Circle",airplane
"4 Feathertoy Circle",Rodgers,Tanster,SqueekRod@meowmail.com,,"4 Feathertoy Circle","golf cart"
"4 Longtail Court",Calico,Gordon,SSoft2525@purrmail.com,,"4 Longtail Court",canoe
"4 Lower Treetrunk Drive",Rachio,Goldy,Fluffy1@purrmail.com,,"4 Lower Treetrunk Drive",feet
"4 Mousetail Blvd",Rodgers,Scottie,Jblue222@meowmail.com,,"4 Mousetail Blvd",bobsled
"4 Pasatuna Avenue",Frankenfluff,Buttons,Buttons1@purrmail.com,,"4 Pasatuna Avenue",train
"5 Cheeseburger Circle",Dieter,Isley,BNFeliniov@catmail.com,,"5 Cheeseburger Circle",raft
"5 Feathertoy Circle",Twitchitail,Tom,WRod22@catmail.com,,"5 Feathertoy Circle",drone
"5 Lower Treetrunk Drive",Jones,Cleopatra,Cleo30BC@catmail.com,,"5 Lower Treetrunk Drive","golf cart"
"5 Mousetail Blvd",Patterson,Pinkie,Scotrod78@catmail.com,,"5 Mousetail Blvd","snow shoes"
"6 Feathertoy Circle",Rodgers,Holly,Mitzy55@catmail.com,,"6 Feathertoy Circle",scooter
"6 Lower Treetrunk Drive",Thagorus,Py,PyThag314@meowmail.com,,"6 Lower Treetrunk Drive",vimana
"6 Mousetail Blvd",Cat,Bunny,PinkieP@purrmail.com,,"6 Mousetail Blvd","dog sled"
"7 Cheeseburger Circle",Softpaw,Mittens,HRod19@catmail.com,,"7 Cheeseburger Circle",bicycle
"7 Feathertoy Circle",Kerspeckles,Wilhelmina,MerArm67@meowmail.com,,"7 Feathertoy Circle","roller skates"
"7 Lower Treetrunk Drive",Mewton,Isaac,IMew1790@purrmail.com,,"7 Lower Treetrunk Drive","donkey cart"
"7 Mousetail Blvd",Patterson,Pinkie,BunnC25@catmail.com,,"7 Mousetail Blvd",chariot
"8 Feathertoy Circle",Chaserson,Prissy,MittensS@purrmail.com,,"8 Feathertoy Circle",dirigible
"8 Mousetail Blvd",Shaggyback,Snow,SardinesRUS@catmail.com,,"8 Mousetail Blvd",wings
"9 Cheeseburger Circle",Armstrong,Mercedes,Ralph@meowmail.com,,"9 Cheeseburger Circle","golf cart"
"9 Feathertoy Circle",Snowball,Larry,BlackieSoftpaw@meowmail.com,,"9 Feathertoy Circle","flying saucer"
"9 Mousetail Blvd",Sheddington,Fluffy,Sshaggy@catmail.com,,"9 Mousetail Blvd",levitation
Each field is separated by the delimiter '%%%'.
