PDA

View Full Version : Trying to import a txt file into VB


Mickie D
01-23-2017, 02:11 PM
Hi guys,

I have a text file that I am trying to import into vbulletin to display

I have managed to make the backend that actually puts the information into vbulletin (my template).

But I am having problem with the PREG match and the output

basically the txt files I am using have allot of crap in them and I am trying to weed out the good bits

Example of text file

Anson Road, London, N7 0AA
Anson Road, London, N7 0AB
Huddleston Road, London, N7 0AD
Huddleston Road, London, N7 0AE
London, N7 0AF (No Longer In Use)
Huddleston Road, London, N7 0AG
St Georges Avenue, London, N7 0AH
St Georges Avenue, London, N7 0AJ
Archibald Road, London, N7 0AL
Archibald Road, London, N7 0AN
Huddleston Road, London, N7 0AP
London, N7 0AQ (No Longer In Use)
Anson Road, London, N7 0AR
Anson Road, London, N7 0AS
Anson Road, London, N7 0AT
Anson Road, London, N7 0AU
London, N7 0AW (No Longer In Use)
Anson Road, London, N7 0AX
London, N7 0AY (No Longer In Use)
London, N7 0AZ (No Longer In Use)
London, N7 0BA (No Longer In Use)
London, N7 0BB (No Longer In Use)
Rowstock Gardens, London, N7 0BD
Rowstock Gardens, London, N7 0BE
Holbrooke Court, London, N7 0BF
Rowstock Gardens, London, N7 0BG
Rowstock Gardens, London, N7 0BH


using preg match I just want to grab the road names, without the London and the postcodes (N7 OBH)

So I would like the preg replace to cycle each line and remove everything that is not a road name.

LEAVING THIS:


Anson Road
Rowstock Gardens
Holbrooke
St Georges Avenue



being completely honest I do not even know where to start with preg replace I am losing my mind here

Cheers All

Mick

Dave
01-23-2017, 02:22 PM
What does the PHP code look like now?
You don't really need a preg_replace for this though, you can just iterate through each line, explode on comma's, then grab the first result.

Mickie D
01-23-2017, 02:57 PM
Hi Dave thank you for that.

but then I would have loads of London, would it be possible to have a stop word like London

IE
if line starts with london - skip line???

I will post the code in the next hour once back in front of my main pc Dave...

Thanks Dave

Dave
01-23-2017, 03:03 PM
Yes, using the strpos function you can check whether it contains the string London.

Something like:
if(strpos($string, 'London') === false) {
// continue
}

Mickie D
01-23-2017, 03:12 PM
Yes, using the strpos function you can check whether it contains the string London.

Something like:
if(strpos($string, 'London') === false) {
// continue
}

Thanks Dave at the moment I have this code.


$roadfile = fopen("road.txt", "r") or die("Unable to open file!");

$output = fread($roadfile,filesize("road.txt"));

//preg replace code to go here:
//$output = preg_replace('London', '', $output);

fclose($roadfile);


So I am thinking with your code it will be


$roadfile = fopen("road.txt", "r") or die("Unable to open file!");

$output = fread($roadfile,filesize("road.txt"));

//preg replace code to go here:
//$output = preg_replace('London', '', $output);

if(strpos($output, 'London') === false) {
// continue
//explode lines and stop on comma
}

fclose($roadfile);

Dave
01-23-2017, 04:34 PM
Something like this should work:

$handle = fopen("road.txt", "r");
if ($handle) {
while (($line = fgets($handle)) !== false) {

$t = explode(",", $line);
if(isset($t[0]) && strpos($t[0], "London") === false){

$road = trim($t[0]);

// Use $road.

}
}
fclose($handle);
}

Mickie D
01-23-2017, 07:07 PM
Thanks Dave for all your help mate.

I will get this code tested tomorrow when I am back on my work PC.

Will report back then, thank you very much.

Mick

Mickie D
02-09-2017, 11:45 AM
Hi Dave,

Sorry for the delay, I had a family emergency.

I am getting no output when using the code you posted

Here is how I am using the code

// ########################## START MICKS PLUGIN PROTECTION ############################
if (!in_array($vbulletin->userinfo['userid'], array(1)))

// if($vbulletin->userinfo['usergroupid'] != 6)
{
print_no_permission();
}else{


// ######################### START PLUGIN #############################################
$handle = fopen("./streetview/n7.txt", "r");
if ($handle) {
while (($line = fgets($handle)) !== false) {

$t = explode(",", $line);
if(isset($t[0]) && strpos($t[0], "London") === false){

$road = trim($t[0]);

$sv = $road; // Use $road.

}
}
fclose($handle);
}

}



// ###### Register Variables #######
vB_Template::preRegister('streetview',array('sv' => $sv));


And in the template I am using the following to call the output


{vb:raw sv}


Thanks Dave

Dave
02-09-2017, 09:05 PM
In which hook did you add the code?

Also what you're doing now will keep overwriting the $sv variable, you'll want to add it to an array and then you can iterate through the array in the template.

Mickie D
02-10-2017, 03:14 PM
Hi Dave,

No hook, it's an actual php page I made for vbulletin that has a template associated.

I will create an array and post back,

Thank you Dave.

--------------- Added 1486753631 at 1486753631 ---------------

Hi Dave,

I put road into a foreach array, but its still not giving me any luck.


$handle = fopen("./streetview/n7.txt", "r");
if ($handle) {
while (($line = fgets($handle)) !== false) {

$t = explode(",", $line);
if(isset($t[0]) && strpos($t[0], "London") === false){

$road = trim($t[0]);

foreach($road as $svp){
$sv = $svp;
}

// Use $road.

}
}
fclose($handle);
}

}


let me know what you think, and thank you

Mick

--------------- Added 1486828541 at 1486828541 ---------------

I managed to get it working, i went around the houses a little to get it into a comma seperated list - then used the unique array to clean duplicates. I AM SURE lol it could of been done much easier lol

I always forget you need to .= to itterate the arrays :(

but it works, if anyone wants it


$handle = fopen("./streetview/n7.txt", "r");

while($row = fgets($handle)) {
list($road) = explode( ",", $row );

if(isset($road) && strpos($road, "London") === false){
$svp .= $road . ', ';

$sv = implode(',', array_unique(explode(',', $svp)));

}

}
fclose($handle);
}