Kom ihåg mig?
Home Menu

Menu


PHP Hitta flera strängar i flera olika .txt filer

Ämnesverktyg Visningsalternativ
Oläst 2014-07-28, 14:34 #1
Cos Cos är inte uppkopplad
Flitig postare
 
Reg.datum: Apr 2007
Inlägg: 307
Cos Cos är inte uppkopplad
Flitig postare
 
Reg.datum: Apr 2007
Inlägg: 307
Standard PHP Hitta flera strängar i flera olika .txt filer

Godag,

Sitter och felsöker ett problem med en systemintegration här. Jag har en lista på olika nummer i en .txt fil som jag vill försöka hitta i flera olika .txt filer.


PHP-kod:
<?php
$strings 
file(".\search_for.txt",FILE_IGNORE_NEW_LINES);

    foreach(
$strings as $searchfor) {
        
$directory './archive_backup';
        
$files array_diff(scandir($directory), array('..','.'));

            foreach(
$files as $file) {
            
$file "./archive_backup/" $file;

                
$contents file_get_contents($file);
                
$pattern preg_quote($searchfor'/');
                
$pattern "/^.*$pattern.*\$/m";
                    if(
preg_match_all($pattern$contents$matches)){
                        
                        
// ?!?!?
                        
                
} else {
                
                        
// ?!?!?

                
}
            }
    }
    
?>

Problemet jag brottas med här är att jag vet inte hur jag ska få till det för att endast printa ut de $searchfor -värden som inte hittas i någon av $file -filerna.

Som de ser ut just nu så kommer loopen att printa ut resultatet för varje loop för varje fil.

Vi talar flera tiotusentals värden att söka efter och lika många filer att söka igenom, så försöka mig på att lösa det med PHP.

Några idéer hur jag ska lösa det?
Cos är inte uppkopplad   Svara med citatSvara med citat
Oläst 2014-07-29, 11:51 #2
tec tec är inte uppkopplad
Medlem
 
Reg.datum: Mar 2010
Inlägg: 54
tec tec är inte uppkopplad
Medlem
 
Reg.datum: Mar 2010
Inlägg: 54
PHP-kod:
<?php
$strings 
file(".\search_for.txt"FILE_IGNORE_NEW_LINES);

foreach(
$strings as $key => $searchfor){
        
$directory './archive_backup';
        
$files array_diff(scandir($directory), array('..','.'));

        foreach(
$files as $file) { 
            
$file "./archive_backup/" $file;
            
$contents file_get_contents($file);
                
        
/*
        * kollar om $searchfor finns i $contents
        * !== false undviker att strpos missar $searchfor i början på strängen
        * strpos med inga träffar returnerar 0, strpos med träff från första tecken returnerar 0         
        */
        
if(strpos($contents$searchfor) !== false){  
          
// $searchfor finns i $contents och därmed i $file
                                  
           
unset($strings[$key]); // plocka bort värdet från högen(array) - endast de som inte hittas kommer att finnas kvar
           
break; // hoppa ur foreach($files as $file) // nuvarande $searchfor redan hittad - gå vidare på nästa                    
        
}
    }
}
echo 
'<pre>';
print_r($strings); // skriv ut de värden som inte har plockats bort
echo '</pre>';    
?>
Något sånt här borde fungera, byggde vidare på din kod. Ska det ske så effektivt som möjligt så bör alla nummer läsas in i en array som du sedan kör array_diff() på mot search_for-numrena. Är det extrema mängder så är array_diff_key() snabbare - kräver dock att du lägger numrena som keys i alla arrays.
tec är inte uppkopplad   Svara med citatSvara med citat
Oläst 2014-07-30, 08:50 #3
Cos Cos är inte uppkopplad
Flitig postare
 
Reg.datum: Apr 2007
Inlägg: 307
Cos Cos är inte uppkopplad
Flitig postare
 
Reg.datum: Apr 2007
Inlägg: 307
Snyggt. Tack för hjälpen!
Cos är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 04:24.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017