Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  4 1044
Hei
Jeg har en tekstfil fra en gammel eggdrop.
Hver linje inneholder følgende format:

ord ; definisjon ; nick

Ord er oppslagsordet. Definisjon er whatever noen har definert ordet som. Nick er irc-nicket til den som har lagt inn ordet i eggdropen. De tre variablene er adskilt med semikolon.

Jeg ønsker å gjøre denne filen søkbar på en hjemmeside. Man skal kunne søke på oppslagsordet, og gjerne også liste opp alle ord som et bestemt nick har lagt inn, men i første omgang er det viktigste at man kan søke på ord.

Hvordan gjør jeg dette enklest mulig? Har ikke behov for at man skal legge inn flere ord, ettersom det bare har historisk verdi og allerede inneholder 5000 ord.

Ønsker også mulighet for å vise en tilfeldig (random) linje.

Takk for hjelp
Sist endret av metooism; 22. september 2015 kl. 18:35.
NOOOOOOOOOOOOOOOOOO-
robhol's Avatar
Hvor kjent er du med programmering og hva trenger du hjelp til?
Trenger bare èn tabell til dette. Lagre alle verdiene i denne tabellen, og gjør oppslag mot den. For å få ut en random linje, velger du bare en tilfeldig rad i tabellen.
Her vil det være fornuftig å konvertere data fra tekstfil til database. Hvis du har MySQL tilgjengelig, er den enkel å grei å forholde seg til. Du må da opprette en database og en tabell i databasen. Tabellen inneholder de samme feltene som fila di, pluss en primærnøkkel "id":

"id", "word", "nick", "definition".

Primærnøkkel på "id", og lag indekser på "word" og "nick" så spørringen går kjapt.

Videre trenger du en applikasjon som leser fila og gjør spørringen. De fleste hosting-firmaene tilbyr PHP, og PHP har støtte for MySQL.

Eksempler på spørringer du kan gjøre:

Hente random entry:

Kode

SELECT * FROM table ORDER BY RANDOM() LIMIT 1;
Søke på ord:

Kode

SELECT * FROM table WHERE word = "ordet du vil søke på";
Hente alle ord en bruker har lagt inn:

Kode

SELECT * FROM table WHERE nick = "nicket du søker på";
Hadde 5 minutter ledig på jobb og er i et godt humør.
Har ikke testet scriptet, men oppgaven du spør om er ikke veldig komplisert og linjene jeg skrev burde gi en grei pekepinn på hvordan dette kan løses i php.

Det vil dog bli raskere om du gjør som flere her har nevnt og putter dataene inn i en tabell.

Kode

<form method="GET" action="">
<input type="text" name="search" />
<select name="scope">
<option value="word" selected="selected">Ord</option>
<option value="nick">Brukernavn</option>
</select><input type="submit" value="Søk!"/>
</form><hr/>
<?php
// Åpner filen dinfil.txt.
$file = file('DinTekstfil.txt');

// Søkevariabler
$search = $_GET['search'];
$scope = $_GET['scope']; // Ord eller nick

// Setter doSearch til usann som default
$doSearch = false;

// Enkel funksjon for å hente ut random verdi fra et array
function getRndFromArr($arr){
return $arr[ ( rand(0, count($arr) ) )];
}

// Ser etter om søkestrengen er lenger enn 3 og at $scope enten er word/nick. Setter deretter $doSearch til sann
if( strlen($search) > 3 && in_array($scope, ['word','nick']) ){
$doSearch = true;
$searchIndex = ($scope == 'word') ? 0 : 2;
}

// Begynner å loope filen
foreach( $file as $line ){
$r = explode(';', $line);

// Hvis ikke søk er aktivert, lagre raden i en variabel og gå videre
if( !$doSearch ) {
$result[] = $r;
continue;
}

// Hit kommer vi kun dersom $doSearch er sann. Vi kan derfor filtrere på scope (ord / nick) med søkestrengen som er angitt

// Hvis søkestrengen er lik det vi søker etter lagres resultatet i $result-variabelen
if( $r[$searchIndex] == $search )
$result[] = $r;

}

/* Vi er ferdig loopet og kan gjøre hva vi vil med resultatet.
Resultatet ligger lagret i $result-variabelen
*/

// Printer ut hele resultatet
print_r($result);

// Henter ut en random verdi fra resultatet
print_r(getRndFromArr($result));
Edit:
La til eksempel på random resultat.
Sist endret av lsrr; 23. september 2015 kl. 12:22.