Avatar billede alleykat Nybegynder
24. maj 2004 - 06:14 Der er 7 kommentarer og
1 løsning

Citat-script der henter fra fil

Jeg ka' ikke rigtig hit' u' a'et med filer i php, og ved ikke helt hvad der er nemmest, men det er jeg sikker på at der er no'n af de vilde kodere herinde der kan. Det er rent lir til min personlige, lokale startside/webside, men man skal jo fyre no'n points af ét eller andet sted, såeh...

Jeg har stakkevis af filer med citater liggende, og kunne godt tænke mig at de kunne vises på siden i en lille kasse eller noget, lidt fancy, ét af gangen enten i rækkefølge eller tilfældigt.

Filerne er i .txt format, og der er faktisk 3 slags:
<eksempel 1>
Isn't it scary that doctors call what they do "practice"?
%
Where do forest rangers go to get away from it all?
%
</eksempel 1><eksempel 2>
There is not a truth existing which I fear... or would wish unknown to the
whole world.
      -- Thomas Jefferson

Blessed are the forgetful:  for they get the better even of their
blunders.
      -- Friedrich Nietzsche
</eksempel 2><eksempel 3>
Sometimes you gotta create what you want to be a part of.
      --Geri Weitzman

Speak the truth, but leave immediately after.
      --Slovenian Proverb

Imagination is more important than knowledge.
      --Albert Einstein
</eksempel 3>

Jeg håber på at få en phpfil der kan spytte en lille tabel med én quote fra én eller flere filer ud, i et pænt format. Jeg gi'r 150 points fordi jeg håber den bli'r lidt fancy og måske kan håndtere flere af filformaterne, evt. et array af filer, og evt. kan løbe dem igennem fortløbende.

Håber I gider; jeg deler selvf. en flok filer med quotes så alle kan få fornøjelse af dem hvis I skal bruge dem eller bare til det 'endelige resultat'. :D
Avatar billede alleykat Nybegynder
24. maj 2004 - 06:17 #1
Og selvfølgelig fik jeg lavet eksempel 2 og 3 ens... eksempel 3 skulle se sådan ud:
<eksempel 3>
It's life, Jim... but not as we know it.
Spock
Learning is not compulsory... neither is survival.
W. Edwards Deming
We are what we pretend to be, but we better be very careful what we pretend.
Kurt Vonnegut
Trust in Allah, but tie your camel.
Old Muslim Proverb
If it weren't for the last minute, nothing would get done.
Anonymous
</eksempel 3> (altså bare uden extra linieskift og --) sorry!
Avatar billede Slettet bruger
24. maj 2004 - 09:00 #2
Der er to problemstillinger forbundet med det.

1) Man skal på en eller anden måde kunne vide, hvor mange der er i en fil for at kunne lave det tilfældigt.

2) Der skal laves 3 (eller 2) forskellige metoder til at søge efter de enkelte citater.

Det smarteste ville egentlig være at starte med at få filerne puttet over i en database, for så bliver det meget lettere at lave en stump kode til at udvælge et (eller flere) citater og vise det.

Nu kan jeg ikke her se, hvordan linieskift ser ud i filerne, og de er en væsentlig del af "her begynder et nyt citat"-markeringen, derudover fortalte du ikke, om eksempel 3 skal forstås således, at hvert citat altid har netop 2 linier.
Avatar billede hammerhead Nybegynder
24. maj 2004 - 09:08 #3
Hej.

Jeg bruger selv et script som kører via txt filer, men er ved at gå over til et der kører via database. Du kan se det her (viser et nyt/random ved hver sideopdatering)

http://www.flykending.dk/randomq/quotation.php

På forsiden kører det gamle via txt filer, under Viste du at

http://www.flykending.dk

Er det noget du kan bruge? så er det gratis scripts fundet på nettet.
Avatar billede dennismp Nybegynder
24. maj 2004 - 20:44 #4
<?php
// læs filer af type1
function quotes_t1($filename) {
    $content = file($filename);
    $quotes = array();
    $str = '';
    foreach($content as $line) {
        $line = rtrim($line);
        if( $line == '/font>) {
            if(! empty($str) )
                $quotes[] = nl2br($str);
            $str = '';
        }
        else {
            $str .= $line;
        }
    }
    if( $line == '/font>)
        if(! empty($str) )
            $quotes[] = nl2br($str);
    return $quotes;
}

// type 2
function quotes_t2($filename) {
    $content = file($filename);
    $quotes = array();
    $str = '';
    foreach($content as $line) {
        $line = rtrim($line);
        if( empty($line) ) {
            if(! empty($str) )
                $quotes[] = nl2br($str);
            $str = '';
        }
        else {
            $str .= $line;
        }
    }
    if(! empty($str) )
        $quotes[] = nl2br($str);
    return $quotes;
}

// type 3
function quotes_t3($filename) {
    $content = file($filename);
    $quotes = array();
    $str = '';
    $i = 0;
    foreach($content as $line) {
        $i++;
        $line = rtrim($line);
        if( $i == 1 ) {
            $str = $line;
        }
        else {
            $i = 0;
            $quotes[] = $str . ' -- '.$line;
        }
    }
    return $quotes;
}

$quotes = array();

// Læs flere filer af type 1.
foreach(array('file1','file2','file3') as $file)
  $quotes = array_merge(quotes_t1($file),$quotes);

// Læs een fil af type 2 og type 3.
$quotes = array_merge(quotes_t2('enandenfil'),$quotes);
$quotes = array_merge(quotes_t3('hokuspokus'),$quotes);

// Nu indeholder $quotes alle citaterne. Lad os vælge en tilfældigt
print $quotes(mt_rand(0,count($quotes)-1));
?>
Avatar billede alleykat Nybegynder
25. maj 2004 - 06:00 #5
sandbox > 1) Det har du ret i, det er nok det smarteste. 2) Jep. men idéen var netop at slippe for dette at det skulle hente fra databasen (så jeg slipper for at konvertere)... Mht. linieskift, det var osse dumt med de eksempler. Nemmere var nok at sige at de fandtes med 3 typer adskilleser - % imellem hvert citat i 1. type, dobbelt linieskift i anden type og 2 linier ad gangen i den sidste type. :)

hammerhead > lige præcis. Måske lige med lidt extra italics eller anden effekt for dem med navn på, det var idéen, resten kan jeg nok klare selv hehe. Men hvordan scriptet lige ved hvad der er hvad... jeg kommer nok til at formattere en del af de quotes manuelt alligevel.

dennismp > se, nu er vi inde på noget af det helt rigtige :D lige bortset fra, at jeg nok har lidt for mange filer til at det ville være skægt for serveren.. *SS*
Men jeg kan i hvert fald bruge det som udgangspunkt og selv bygge videre på det - med mindre du vil bygge videre på det? Eller ville 75 pts. være OK for ovenst.?

http://alleykat.lir.dk/eksperten/samples.zip 40k eksempler
http://alleykat.lir.dk/eksperten/full.zip 300k hele 'samlingen' (mange gengangere)
Filerne ligger der ikke permanent, men i hvert fald en tid. ;)
Avatar billede dennismp Nybegynder
25. maj 2004 - 07:51 #6
Hvis du vil smide det i en database så er det nemt at tilføje..

Istedet for print linjen skriver du

foreach($quotes as $q) {
  $q = addslashes($q);
  $sql = "INSERT INTO quotes(id, quotes) VALUES(NULL,'$q')";
  mysql_query($sql) or die(mysql_error());
}

tabellen kan så se således ud:

CREATE TABLE quotes (
  id int primary key auto_increment not null,
  quotes varchar(200) not null
);
Avatar billede dennismp Nybegynder
25. maj 2004 - 07:52 #7
Så vil scriptet virker så et konverteringsscript - så du bare kører det een gang.. Nu har du det i databasen. Så er resten bare lidt SQL.
Avatar billede alleykat Nybegynder
25. maj 2004 - 13:52 #8
:) jeg er med dennismp, jeg havde faktisk allerede konverteret det ind i databasen med din rutine - æhm ja jeg er åbenbart lidt en kodeneanderthaler, for selvom jeg sad med en fil med stribevis af eksempler på FOREACH, brugte jeg en FOR($i=0;$i<(count())) til det samme, doh. Men altså, jeg ville jo helst slippe for den databaseforbindelse. :)

Jeg vil nu bruge din 1. løsning i stedet, jeg vælger bare 1 filtype random og 1 fil random fra det pågældende typearray og vælger der ud fra i stedet - så skal serveren ikke stå og lave arrays af en lille MB tekstfiler hver gang.

Og der er jo ingen grund til at være fedtet, nu der er gratis pro-medlemsskab. ;)
Takker og ha' en fortsat go' dag.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester