Question

I'm trying parse a tab delemited text file into a set of PHP arrays, and help would be very much appreciated.

The .txt wil look like this (tab delimited not spaces)

data1a data1b data1c data1d
data2a data2b data2c data2d
data3a data3b data3c data3d
data4a data4b data4c data4d

and so on

I wish the PHP arrays to look like this

$arrayA = array('data1a', 'data2a', 'data3a', 'data4a');
$arrayB = array('data1b', 'data2b', 'data3b', 'data4b');
$arrayC = array('data1c', 'data2c', 'data3c', 'data4c');
$arrayD = array('data1d', 'data2d', 'data3d', 'data4d');

And I need the .txt file uploaded by a simple html form, e.g.

<form action="form.php" method="post" enctype="multipart/form-data">
  <label for="file">Filename:</label>
  <input type="file" name="file" id="file" /> 
  <input type="submit" name="submit" value="Submit" />
</form>

Any ideas on the code to place inside form.php?

Many thanks!

Was it helpful?

Solution

Consider the content of your text.txt file

FristLineFirstData  FirstLineSecondData FirstLineThirdData
SecondLineFirstData SecondLineSecondData    SecondLineThirdData

Tab separed.

And the script :

<?php
$file = "text.txt";// Your Temp Uploaded file
$handle = fopen($file, "r"); // Make all conditions to avoid errors
$read = file_get_contents($file); //read
$lines = explode("\n", $read);//get
$i= 0;//initialize
foreach($lines as $key => $value){
    $cols[$i] = explode("\t", $value);
    $i++;
}
echo "<pre>";
print_r($cols); //explore results
echo "</pre>";
?>

will return

Array
(
    [0] => Array
        (
            [0] => FristLineFirstData
            [1] => FirstLineSecondData
            [2] => FirstLineThirdData
        )

    [1] => Array
        (
            [0] => SecondLineFirstData
            [1] => SecondLineSecondData
            [2] => SecondLineThirdData
        )

)

OTHER TIPS

Below is a barebone solution for your problem:

<?php
 $error = false;

 if (isset($_POST) && isset($_POST['submit']) && isset($_FILES) {)
    $file = $_FILES['file'];
    if (file_exists($_FILES['tmp_name'])){
       $handle = fopen($_FILES['tmp_name']);
       $data = fgetcsv($handle, 0, '\t');
    }
    // do your data processing here
    // ...
    // do your processing result display there
    // ...
    // or redirect to another page.
 }
 if ($error) {
   // put some error message here if necessary
 }
 // form display below
 ?>
 <!-- HTML FORM goes here --!>
 <?
 }
 ?>

The file data will be all grouped in the same array $data, indexed by the corresponding line number in the file.

See:

on the PHP documentation website.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top