Toon posts:

PHP-> Verwijder uit een tekst bestand!

Pagina: 1
Acties:
  • 174 views sinds 30-01-2008

Verwijderd

Topicstarter
Ik heb een newsletter systeem gemaakt, Ik kan nu mensen toevoegen maar uit het tekst bestand wil ik dat je ze ook kan verwijderen. De adressen worden opgeslagen als EMAILADRES,EMAILADRES,enz.... Dus hoe verwijderen ik een opgegeven emailadres hieruit.

Alvast erg bedankt!

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 29-08 22:51

D2k

openen
inlezen
regel verwijderen
wegschrijven

have fun

Doet iets met Cloud (MS/IBM)


  • sdomburg
  • Registratie: Augustus 2001
  • Laatst online: 03-09-2024

Verwijderd

Topicstarter
Dat snap ik, heb al van alles geprobeerd maar ben nog een newbie en ik snap niet wat ik meot doen. Dus zou iemand zo vriendelijk willen zijn om te laten zien hoe het precies moet?

Verwijderd

php.net/fopen

  • judgem
  • Registratie: December 2001
  • Laatst online: 28-04-2014

judgem

Lord of Metal

Waarom maak je hiervoor geen MySQl tabel aan? Werkt een heel stuk efficienter...

- Ik bespreek ook harde waren en dan wel op www.lordsofmetal.nl - en ik draai en programmeer ze in DYNAMO


Verwijderd

Probeer dit eens:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
$file = "bestand.txt";

$emailadres = "naam@domein.nl";

$open = file($file);
for($i=0;$i < count($open);$i++){
  if(!eregi($emailadres,$open[$i])){
    $output .= $file[$i] ."\r\n";
  }
  fwrite($open,$output);
}
fclose($open);

Voor de mensen hier is het volgens mij een beetje moeilijk om een antwoord te geven waar ze iets aan hebben. En niet iedereen heeft de beschikking over een database.

/edit
Dit is natuurlijk wel als er op elke regel een emailadres staat.

  • Stewie!
  • Registratie: September 2001
  • Laatst online: 16:40

Stewie!

Keen must die!

mm, hij heeft niet voor niks geen mysql gekozen, dus niet meteen over sql beginnen!

Het is idd erg vervelend om zo'n tekstfiles steeds helemaal te schrijven, maar zit niks anders op. Misschien kan je meerdere tekstfiles maken (voor elk adres één, zet je er meteen een profiel bij van die persoon ofzo) en dan gaat het veel makkelijker!


Strava: https://www.strava.com/athletes/149347154


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

DaMorpheus schreef op 03 november 2002 @ 23:01:
mm, hij heeft niet voor niks geen mysql gekozen, dus niet meteen over sql beginnen!

Het is idd erg vervelend om zo'n tekstfiles steeds helemaal te schrijven, maar zit niks anders op. Misschien kan je meerdere tekstfiles maken (voor elk adres één, zet je er meteen een profiel bij van die persoon ofzo) en dan gaat het veel makkelijker!


Vervelend om tekstfile opnieuw te schrijven? Voor een wijziging in een bestand zal ieder programma toch altijd het volledige bestand moeten lezen, wijziging doorvoeren en bestand weer wegschrijven.. (ok uitzonderingen daargelaten ;)) Dus met tekst file is dat niet anders.. En kan nog steeds in een paar regels.

Als ik jou was zou ik wel je formaat aanpassen trouwens.. gewoon ieder emailadres op een nieuwe regel, dat leest een stuk prettiger in dan een lange regel gesplitst door tekens.

Verwijderd

gewoon de file inlezen,
exploden op , naar een array
het te verwijderen email zoeken in de array
eruit mieteren
array imploden op ,
uitscrijven in file.

Verwijderd

Verwijderd schreef op 03 november 2002 @ 23:07:
gewoon de file inlezen,
exploden op , naar een array
het te verwijderen email zoeken in de array
eruit mieteren
array imploden op ,
uitscrijven in file.
That's what I said!

  • Wilke
  • Registratie: December 2000
  • Laatst online: 12:59
Woei, dat wordt lachen zodra iemand een e-mail adres opgeeft met een komma er in.

Ik vraag me af of er 'bewust' voor is gekozen geen SQL te gebruiken, het is namelijk wel een stuk makkelijker :)

En in het andere geval idd alles op een losse regel zetten, da's veel makkelijker. Je zult steeds de hele file moeten inlezen, een entry uit het array halen en dan de file weer terugschrijven. Daarom is dit ook geen handige oplossing, tenzij het over hooguit 100 adressen gaat ofzo....

  • Theuno
  • Registratie: Juni 2001
  • Laatst online: 29-08 23:31

Theuno

Da Devil Crew

Wilke schreef op 03 november 2002 @ 23:50:
Woei, dat wordt lachen zodra iemand een e-mail adres opgeeft met een komma er in.

Ik vraag me af of er 'bewust' voor is gekozen geen SQL te gebruiken, het is namelijk wel een stuk makkelijker :)

En in het andere geval idd alles op een losse regel zetten, da's veel makkelijker. Je zult steeds de hele file moeten inlezen, een entry uit het array halen en dan de file weer terugschrijven. Daarom is dit ook geen handige oplossing, tenzij het over hooguit 100 adressen gaat ofzo....
Zie je ooit emailadressen met een komma erin ???

En ik neem eigenljik aan dat er gewoon geen database beschikbaar is, en dat is dan inderdaad een beetje jammer.

Theuno - Da Devil Crew - Een programmeur is iemand die koffie omzet in software...
Nu nog betere koffie...


  • sebas
  • Registratie: April 2000
  • Laatst online: 16-12-2025
Verwijderd schreef op 03 november 2002 @ 22:05:
Probeer dit eens:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
$file = "bestand.txt";

$emailadres = "naam@domein.nl";

$open = file($file);
for($i=0;$i < count($open);$i++){
  if(!eregi($emailadres,$open[$i])){
    $output .= $file[$i] ."\r\n";
  }
  fwrite($open,$output);
}
fclose($open);

Voor de mensen hier is het volgens mij een beetje moeilijk om een antwoord te geven waar ze iets aan hebben. En niet iedereen heeft de beschikking over een database.

/edit
Dit is natuurlijk wel als er op elke regel een emailadres staat.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
$file = "bestand.txt";

$emailadres = "naam@domein.nl";

$data = join(',', file($file));
// gooi alle emailadressen in aparte elementen uit de array
$data_array = split(',', $data);
// loop over deze array
$n = count($data_array);
for ($=0; $i < $n ; $i++)
    {
    // check of het emailadres verwijdert moet worden   
    if($emailadres==$data_array[$i]) 
        {
        // adres wordt niet aan de array toegevoegd, 
        // we onthouden dat er iets is veranderd is en de file dus teruggeschreven moet worden. 
        $file_changes = 'true'; 
        }
    else
        {
        // emailadres mag erin blijven
        $new_data_array[] = $emailadres;    
        }
    }
// data is veranderd, file schrijven    
if($file_changes)
    {
    fwrite($open,join(',', $new_data_array));
    }
fclose($open);



Dit is in mijn ogen een wat nettere oplossing want:

- er wordt gecheckt of je file ueberhaupt veranderd, zo niet wordt niet geschreven (kan corrupte files bij veel concurrent
connections voorkomen)
- de count() wordt niet elke keer in de loop uitgevoerd maar maar een keer. Is wat efficienter.
- deze oplossing houdt rekening met linebreaks en comma's tussen emailadressen
- er wordt gecheckt of je file ueberhaupt veranderd, zo niet wordt niet geschreven (kan corrupte files bij veel concurrent connections voorkomen)
- het vergelijken van twee substrings is sneller dan een regex, aangezien dit in een for loop zit kan dat bij grotere datahoeveelheden nogal schelen. (Echter is hiervoor een text file dan nog om andere redenen niet meer aan te raden.)

Ook ik heb geen rekening gehouden met filelocking, dwz dat maar een gebruiker tegelijk met dit file bezig mag zijn en de kans dat de data corrupt raakt nog kleiner is. Kan vooral bij grote files en veel concurrent connections een probleem zijn.

Een oplossing ervoor verzinnen is vrij simpel, het spreekt niet echt voor de TS om dat hier te posten en er niet eens een idee van te hebben hoe je het aan zou kunnen pakken.

Everyone complains of his memory, no one of his judgement.


Verwijderd

sebas schreef op 04 november 2002 @ 04:08:
[...]

Dit is in mijn ogen een wat nettere oplossing want:

- er wordt gecheckt of je file ueberhaupt veranderd, zo niet wordt niet geschreven (kan corrupte files bij veel concurrent
connections voorkomen)
- de count() wordt niet elke keer in de loop uitgevoerd maar maar een keer. Is wat efficienter.
- deze oplossing houdt rekening met linebreaks en comma's tussen emailadressen
- er wordt gecheckt of je file ueberhaupt veranderd, zo niet wordt niet geschreven (kan corrupte files bij veel concurrent connections voorkomen)
- het vergelijken van twee substrings is sneller dan een regex, aangezien dit in een for loop zit kan dat bij grotere datahoeveelheden nogal schelen. (Echter is hiervoor een text file dan nog om andere redenen niet meer aan te raden.)

Ook ik heb geen rekening gehouden met filelocking, dwz dat maar een gebruiker tegelijk met dit file bezig mag zijn en de kans dat de data corrupt raakt nog kleiner is. Kan vooral bij grote files en veel concurrent connections een probleem zijn.

Een oplossing ervoor verzinnen is vrij simpel, het spreekt niet echt voor de TS om dat hier te posten en er niet eens een idee van te hebben hoe je het aan zou kunnen pakken.
Mijn voorbeeld was ook maar iets om hem te helpen naar welke richting hij moest denken. De topicstarter zorgt voor de uiteindelijke script. Jou voorbeeld is natuurlijk beter, maar zo kan ik nog een paar dingen toevoegen of veranderen.

Verwijderd

Topicstarter
Erg bedankt allemaal, ik kan nu verder. Ik heb bewust niet voor mysql gekozen omdat dat op veel server niet te verkrijgen is. Ik zit nu tijdelijk bij lycos en wil dat natuurlijk niet zo houden. Ook gaan wij een domein kopen (www.emptyhead.com ofzo) want dat staat beter als www.emptyhead.tk wat wij nu hebben.

Verwijderd

Topicstarter
Nog steeds een probleem. Het wil niet lukken als ik het doe daarom post ik hier maar ff mijn code:

<?

if($melden=="Aan"){
if(!eregi("[A-Za-z0-9_-]+([\.]{1}[A-Za-z0-9_-]+)*@[A-Za-z0-9-]+([\.]{1}[A-Za-z0-9-]+)+",$email)){
echo("Please, fill in a valide email address!");
exit;
}else{
$file=file("maillist.txt");
for($i=0;$i<count($file);$i++){
if(eregi("$email",$file[$i])){
echo("Your email address is ALREADY added to our newsletter!");
exit;
};
};
$bestand=fopen("maillist.txt","a");
fwrite($bestand,"$email,");
fclose($bestand);
echo("Your email address is succesfully added to our newsletter!");
exit;
};
}elseif($melden=="Af"){
if(!eregi("[A-Za-z0-9_-]+([\.]{1}[A-Za-z0-9_-]+)*@[A-Za-z0-9-]+([\.]{1}[A-Za-z0-9-]+)+",$email)){
echo("Please, fill in a valide email address!");
exit;
};
HIER DUS DE VERWIJDER CODE!
echo("Your email address is succesfully removed from our newsletter!");
};

?>

Zover ben ik al gekomen! Nu wil ik dus dat de 'EMAILADRES,' verwijdert wordt uit het bestand als deze overeenkomt met $email. De eregi functie zal niet helpen want het staat allemaal op 1 line. Dit heb ik gedaan in verband met het makkelijk kunnen invoegen van deze adresssen in de mail functie.
Zou iemand mij de exacte code kunnen geven?

Hartelijk dank alvast,

Freak _/-\o_

Verwijderd

Topicstarter
Reply aub even. heb het nogal dringend nodig!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

Verwijderd schreef op 04 november 2002 @ 12:37:
Reply aub even. heb het nogal dringend nodig!


Alles goed verder? 8)7

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Zou iemand mij de exacte code kunnen geven?
rraarrrr :?
Quickstart:
P&W is gericht op het zelf maken van dingen en in het oplossen van problemen die daarbij kunnen ontstaan.
Hier doen we dus niet zo maar aan scriptrequests. Lees die quickstart even helemaal, en constateer wat er niet klopt aan dit topic en je vraag, en probeer het dan nog een keer in dit topic. Ik laat 'm open om je nog een kans te geven. Volgende scriptrequest gaat'ie gewoon dicht.

edit:
freak12:
Reply aub even. heb het nogal dringend nodig!
En dit is natuurlijk helemaal van den gekke! :(

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • HunterPro
  • Registratie: Juni 2001
  • Niet online
Verwijderd schreef op 04 november 2002 @ 12:37:
Reply aub even. heb het nogal dringend nodig!
:D

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

mwah, zo te zien is drm het slotje vergeten :).. Scriptrequest, kicken binnen 24 uur, niet echt prettige attitude....

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Pagina: 1

Dit topic is gesloten.