---
title: "Läsa slumpvis rad i textfil"
type: "forum-thread"
url: "https://www.webforum.nu/amne/javascript/163521-läsa-slumpvis-rad-i-textfil"
topic: "JavaScript"
topic_url: "https://www.webforum.nu/amne/javascript"
author: "Fuel"
published: "2007-08-15T22:55:59.000Z"
updated: "2007-12-09T21:24:01.000Z"
replies: 27
views: 1745
page: 1
pages: 2
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/javascript/163521-läsa-slumpvis-rad-i-textfil"
---

# Läsa slumpvis rad i textfil

_Sida 1 av 2._

## #1 — Fuel, 2007-08-15T22:55Z

Behöver en snutt som läser en slumvis rad i en textfil och sen tar ut raden i en array. Exempel textfil..

hejsvejsan, yyyyyyyg
ggggggggg, hhhhhhhh
blah blahgi, xxxxxxxxxi
asdfassdfd, mmmmmm

säg att den slumpar fram rad 2, alltså hittade\[0\] = ggggggggg och hittade\[1\] = hhhhhhhh

Är det samma som i php ? gärna kodexempel, tackar & bockar på förhand.

Permalänk: https://www.webforum.nu/p/163521

## #2 — coder, 2007-08-16T16:15Z

\<?php
$data = file('datafil.txt');
$rows=sizeof($data);
$r=rand(0,$rows-1);
$selectedRow=explode(',',$data\[$r);

// slumpradens slots = selectedRow\[0\],  selectedRow\[1\], ... etc.

?\>

Permalänk: https://www.webforum.nu/p/2017634

## #3 — Fuel, 2007-08-16T19:30Z

??? Det där ÄR php

Permalänk: https://www.webforum.nu/p/2017663

## #4 — nitro2k01, 2007-08-16T19:59Z

Fuel, hur tänker du dig att du ska läsa en fil i JS?

Permalänk: https://www.webforum.nu/p/2017669

## #5 — coder, 2007-08-16T20:22Z

Ursäkta. Drabbades av kortslutning. :)

Det går faktiskt att låta javascript läsa textfiler från servern med hjälp av **ajaxteknik**  men det är helt hopplöst att få svenska bokstäver ÅÄÖ att fungera. 

Vad man får göra är något skript på serversidan som läser filen och kodar om alla konstiga tecken sen får javascriptet koda tillbaka det.

Det blir lite halvmekigt och eftersom ajax inte når ut riktigt till 100% så blir det inte heller alla som kan del av det.

Du skriver "en liten snutt" och då låter det ju som du förväntar dig något busenkelt ... men vill du ha det i javaskript lär det bli mer än några rader.

Permalänk: https://www.webforum.nu/p/2017676

## #6 — colione, 2007-08-16T20:26Z

Via xmlhttprequest? ;)

```
function doStuff(strStuff){
arrLines=strStuff.split("\n");
arrVal = arrLines[Math.floor(Math.random() * (arrLines.length+1))].split(",");
alert(arrVal[0]);
alert(arrVal[1]);
}

var xhr = new XMLHttpRequest();
xhr.open("GET", "fil.txt");
xhr.onreadystatechange = function() {
  if (xhr.readyState == 4) {
   txt= xhr.responseText;
   doStuff(txt);
  }
}
xhr.send(null);
```

filen i fråga kan se ut såhär:

```
Rad1värde1,Rad1värde2
Rad2värde1,Rad2värde2
Rad3värde1,Rad3värde2
Rad4värde1,Rad4värde2
```

Permalänk: https://www.webforum.nu/p/2017677

## #7 — coder, 2007-08-16T20:44Z

colione:

Du har illustrerat principen. Då återstår bara att få det att fungera och bli kompatibelt också. Jag kan bidra med lite kod så får andra hjälpa till med ÅÄÖ -biten.

Lägg till nedanstående funktion och byt ut new **XMLHttpRequest**  i colione's kod mot **getHttpRequest();**

```
function getHttpRequest()
{
	var handle = false;

	if (window.XMLHttpRequest) 
	{
		handle = new XMLHttpRequest();
		if(handle.overrideMimeType) // Mozilla/Safari/IE7+
		{
			handle.overrideMimeType('text/xml; charset=iso-8859-1'); 
		}
	} 
	else 
	if (window.ActiveXObject) 
	{
		try 
		{
			handle = new ActiveXObject("Msxml2.XMLHTTP");
		} 
		catch (e) 
		{
			try 
			{
				handle = new ActiveXObject("Microsoft.XMLHTTP");
			} 
			catch (e) {}
		}
	}

	if (!handle) 
	{
		return false;
	}

	return handle;
}
```

Permalänk: https://www.webforum.nu/p/2017684

## #8 — nitro2k01, 2007-08-17T13:46Z

Två kommentarer här: 
colione: Uttrycket du använder för att slumpa index kan skrivas enklare som parseInt(Math.random()\*arrLines.length)
Du behöver i detta fall inte göra det gamla tricket att justera med +1 och sedan använda en floor-funktion.
coder: Det borde väl gå jättebra att få ÅÄÖ & co att funka om man strikt håller sig till UTF-8 överallt? Eller krånglar det ändå? (Om textfilen inte är skriven i UTF-8 blir det väl till att skriva/använda en konverterare i valfritt serverspråk)

Permalänk: https://www.webforum.nu/p/2017795

## #9 — coder, 2007-08-17T14:58Z

> **nitro2k01 skrev:**
>
> coder: Det borde väl gå jättebra att få ÅÄÖ & co att funka om man strikt håller sig till UTF-8 överallt? Eller krånglar det ändå? (Om textfilen inte är skriven i UTF-8 blir det väl till att skriva/använda en konverterare i valfritt serverspråk)

Jo. Precis det borde ju fungera.

Jag hade dock grymma problem med detta i något projekt för något år sedan. 

Men i teorin:

Om man på serversidan låter ett skript läsa filen och trycka ut den och är noga med att sätta header("Content-type: text/html; charset=utf-8"); (för php) eller Response.Charset="utf-8" (asp) så borde fungera.

Permalänk: https://www.webforum.nu/p/2017810

## #10 — colione, 2007-08-17T22:25Z

> **nitro2k01 skrev:**
>
> Två kommentarer här: 
> colione: Uttrycket du använder för att slumpa index kan skrivas enklare som parseInt(Math.random()\*arrLines.length)
> Du behöver i detta fall inte göra det gamla tricket att justera med +1 och sedan använda en floor-funktion.

Så sant, jag återanvände en gammal slump-funktion jag hade, därav var det kvar.

Permalänk: https://www.webforum.nu/p/2017875

## #11 — Fuel, 2007-08-18T17:44Z

Tack alla..

Hur markera man nu 2 st som lösning ? :) colione + coders

Hur är det med browser support? IE6 & FF1.5 som lägst?

Jag har verkligen dammiga javascript kunskaper.. vad är try & catch?

Permalänk: https://www.webforum.nu/p/2017996

## #12 — Ledel, 2007-08-18T17:52Z

Skriver i C# och pratar därför om ett program istället, ska ju bara ge bilden.
Man får inte dividera med 0, vilket jag gör nedan. Med try...catch så "fångar" jag felet i catch och behandlar det där. Jag skulle kunna skriva en rad om att "Så fick du inte göra!" istället för att allt kraschar och man får upp ett Windowsmeddelande om fel och programmet avslutas.

try
{
    int division = 0;
    int i = 100 / division;
}
catch (Exception ex)
{
    //Division med noll inte tillåten! Men programmet fortsätter köras
}

Permalänk: https://www.webforum.nu/p/2017998

## #13 — colione, 2007-08-18T17:56Z

Mozillas developer sidor är väldigt bra när det gäller funktions-frågor. Ofta finns det även guider och exempel på implementation:

<http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Guide:Exception_Handling_Statements:try...catch_Statement>

Permalänk: https://www.webforum.nu/p/2018000

## #14 — Fuel, 2007-08-18T18:01Z

Ibland blir det bara tomt, vad beror det på ?

```
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="sv" lang="sv">
<head>
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="cache-control" content="no-cache" />
<script type="text/javascript"><!--//--><![CDATA[//><!--
function getHttpRequest()
{
	var handle = false;

	if (window.getHttpRequest) {
		handle = new getHttpRequest();
		if(handle.overrideMimeType) // Mozilla/Safari/IE7+
		{
			handle.overrideMimeType('text/xml; charset=iso-8859-1'); 
		}
	} else if (window.ActiveXObject) {
		try 
		{
			handle = new ActiveXObject("Msxml2.XMLHTTP");
		} 
		catch (e) 
		{
			try 
			{
				handle = new ActiveXObject("Microsoft.XMLHTTP");
			} 
			catch (e) {}
		}
	}

	if (!handle) 
	{
		return false;
	}

	return handle;
}

function doStuff(strStuff)
{
	arrLines=strStuff.split("\n");
	arrVal = arrLines[Math.floor(Math.random() * (arrLines.length+1))].split(",");
	document.getElementById('visa').innerHTML = arrVal[0] + " - " + arrVal[1];
}

function omg()
{
	var xhr = new XMLHttpRequest();
	xhr.open("GET", "fil.txt");
	xhr.onreadystatechange = function() {
		if (xhr.readyState == 4) {
			txt= xhr.responseText;
			doStuff(txt);
		}
	}
	xhr.send(null);
}
//--><!]]></script>
<style type="text/css"><!--/*--><![CDATA[/*><!--*/
body {
	
}
#visa {
	border: 1px solid #000000;
	padding: 3px;
}
/*]]>*/--></style>
<title>Test</title>
</head>
<body>
<h1>Test</h1>
<div id="visa"></div>
<script type="text/javascript"><!--//--><![CDATA[//><!--
omg();
//--><!]]></script>
</body>
</html>
```

Kan jag ändra arrLines.length+1 till arrLines.length kanske ?

Hepp.. det fungerar inte alls i Internet Exploder..

Permalänk: https://www.webforum.nu/p/2018001

## #15 — colione, 2007-08-18T18:45Z

Såhär ska det se ut: (även ändrat slumpfunktionen till parseInt)

```
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="sv" lang="sv">
<head>
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="cache-control" content="no-cache" />
<script type="text/javascript"><!--//--><![CDATA[//><!--
function getHttpRequest()
{
	var handle = false;

	if (window.XMLHttpRequest) {
		handle = new XMLHttpRequest();
		if(handle.overrideMimeType) // Mozilla/Safari/IE7+
		{
			handle.overrideMimeType('text/xml; charset=iso-8859-1'); 
		}
	} else if (window.ActiveXObject) {
		try 
		{
			handle = new ActiveXObject("Msxml2.XMLHTTP");
		} 
		catch (e) 
		{
			try 
			{
				handle = new ActiveXObject("Microsoft.XMLHTTP");
			} 
			catch (e) {}
		}
	}

	if (!handle) 
	{
		return false;
	}

	return handle;
}

function doStuff(strStuff)
{
	arrLines=strStuff.split("\n");
	arrVal = arrLines[parseInt(Math.random() * (arrLines.length))].split(",");
	document.getElementById('visa').innerHTML = arrVal[0] + " - " + arrVal[1];
}

function omg()
{
	var xhr = new getHttpRequest();
	xhr.open("GET", "fil.txt");
	xhr.onreadystatechange = function() {
		if (xhr.readyState == 4) {
			txt= xhr.responseText;
			doStuff(txt);
		}
	}
	xhr.send(null);
}
//--><!]]></script>
<style type="text/css"><!--/*--><![CDATA[/*><!--*/
body {
	
}
#visa {
	border: 1px solid #000000;
	padding: 3px;
}
/*]]>*/--></style>
<title>Test</title>
</head>
<body>
<h1>Test</h1>
<div id="visa"></div>
<script type="text/javascript"><!--//--><![CDATA[//><!--
omg();
//--><!]]></script>
</body>
</html>
```

Att det blir tomt tror jag beror på hur din fil ser ut. :)

Nu skapas xmlhttprequesten genom klassen getHttpRequest(), den var dock felkonstruerad förut så den anropade sig själv oändligt antal gånger. :) Nu är det fixat. Funkar även i ie6.

Permalänk: https://www.webforum.nu/p/2018011

## #16 — coder, 2007-08-18T21:15Z

> **colione skrev:**
>
> Nu skapas xmlhttprequesten genom klassen getHttpRequest(), den var dock felkonstruerad förut så den anropade sig själv oändligt antal gånger. :) Nu är det fixat. Funkar även i ie6.

Hur menar du då? Var anropar den sig själv? Däremot undrar jag om det ska stå **new**   framför funktionsanropet:

```
function omg()
{
	var xhr = [B][red]new[/red][/B] getHttpRequest();
	xhr.open("GET", "fil.txt");

...
```

Permalänk: https://www.webforum.nu/p/2018043

## #17 — colione, 2007-08-18T21:17Z

> **coder skrev:**
>
> Hur menar du då? Var anropar den sig själv? Däremot undrar jag om det ska stå **new**   framför funktionsanropet:
> 
>
>
> ```
> function omg()
> {
> 	var xhr = [B][red]new[/red][/B] getHttpRequest();
> 	xhr.open("GET", "fil.txt");
> 
> ...
> ```

Felet fanns inte i din kod utan i Fuels kod, han hade tydligen modifierat det hela lite. :)
Varför skulle det inte stå new? :)

Permalänk: https://www.webforum.nu/p/2018045

## #18 — coder, 2007-08-19T07:24Z

> **colione skrev:**
>
> Varför skulle det inte stå new? :)

Därför att objektet redan är skapat i funktionen getHttpRequest(). Nu blir det ju 

var xhr = new (new XMLHttpRequest());

Permalänk: https://www.webforum.nu/p/2018130

## #19 — Fuel, 2007-08-19T08:41Z

hmm..

```
function omg()
{
	var xhr = getHttpRequest();
```

Både med och utan "new" fungerar i IE6 & FF2

Permalänk: https://www.webforum.nu/p/2018141

## #20 — colione, 2007-08-19T10:06Z

> **coder skrev:**
>
> Därför att objektet redan är skapat i funktionen getHttpRequest(). Nu blir det ju 
> 
> var xhr = new (new XMLHttpRequest());

Nja, du returnerar ett skapat objekt däremot. Hade du returnerat new XMLHttpRequest() och gjort en new på den hade du fått ett js-fel (du ska få ivf.)

Vad du gör är ju att be webbläsaren skapa dig en ny instans getHttpRequest, denna returnerar i sin tur ett objekt som här placeras i xhr.

Permalänk: https://www.webforum.nu/p/2018156

---

Tråden på webben: https://www.webforum.nu/amne/javascript/163521-läsa-slumpvis-rad-i-textfil  
Nästa sida: https://www.webforum.nu/amne/javascript/163521-läsa-slumpvis-rad-i-textfil/page2.md
