[Javascript] textarea -> string

Pagina: 1
Acties:

  • Jig
  • Registratie: Mei 2003
  • Laatst online: 29-07 16:06
Ik ben een n00b in Javascript, ik kan sinds gister middag een formuliertje maken en ook wat rekenen daar mee.
Maar nu wil ik het anders aanpakken. Ik wil een textarea maken, waar je een lap text in plakt. Dan druk je op een knopje, en haalt het script uit die lap text enkele waarden en gaat daarmee rekenen. Het probleem is dat ik niet weet hoe je een bepaald woord/cijfer uit zo'n text haalt, en opslaat in een variabele(dat is een string afaik :)). De positie van die variabalen is altijd gelijk. Ik heb een vemoede dat je het tegen overgestelde van indexOf() moet gebruiken.

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Javascript experts zitten bij de buren (/13) vandaar dat ik het topic ook even over de schutting heen gooi :)
Succes ermee :)

  • Jig
  • Registratie: Mei 2003
  • Laatst online: 29-07 16:06
ty :)

Verwijderd

Daarvoor heb je in javascript de handige methode substr(). :)

Dus bijvoorbeeld:
JavaScript:
1
var littleText = document.forms[0].elements[0].value.substr(20, 50);

Verwijderd

Verwijderd schreef op 07 May 2003 @ 18:55:
Daarvoor heb je in javascript de handige methode substr(). :)

Dus bijvoorbeeld:
JavaScript:
1
var littleText = document.forms[0].elements[0].value.substr(20, 50);
ja dit is code die wel gaat werken, maar alleen als de waarden altijd op exact defezlde plaats staan... en dat zal nog wel eens fout kunnen gaan, dus zorg er dan wel voor dat je het goed afvangt, zometeen ben je met letters aan het rekenen...

houd er wel ff rekening mee dat je met een string niet kan rekenen, alleen met getallen is te rekenen anders krijg je een fijne NaN melding terug...

  • Guillome
  • Registratie: Januari 2001
  • Niet online

Guillome

test

Je kan ook gebruik maken van Reguliere Expressie.
Dat is idd een stuk veiliger.
Dus zoiets:
littleText = document.forms[0].elements[0].value.replace(/JouText=(\d+)/gi);
Dan is littleText alle cijfers die na de = komt. Komt ie een letter tegen, dan stopt ie met zoeken.

If then else matters! - I5 12600KF, Asus Tuf GT501, Gigabyte Gaming OC 16G 5080 RTX, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


  • Jig
  • Registratie: Mei 2003
  • Laatst online: 29-07 16:06
Hmm, ik snap het nog niet echt, ik zal nog een voorbeeld geven, wat uitleg wat ik zou willen. De bedoeling is dat bezoekers van een andere site Ctrl+A Ctrl+V doen in mijn textarea, en dat het script dan de juiste info eruit vist en verwerkt. Hier onder een klein stukje van het te verwerken stuk:
code:
1
2
3
4
5
iexplorer div bug patchServer time: 2003-05-07 17:44:20 

Tech tree Controlled planets Galactic maps Discussion forums 
Fleets & armies Trading relations Infiltrations 
jig Cash 11,502,301§ Preferences Logout Help


Als voorbeeld wil ik dan mijn nickname eruit halen en opslaan in een string. Dat is dus op de 7e (forum haalt er 2 weg) regel het 1e woord. (en dat is het altijd, die plek) Hoe doe ik dat dan met substr()? Aub wat uitleg hoe dat dan precies werkt.
Thnx

  • Guillome
  • Registratie: Januari 2001
  • Niet online

Guillome

test

Altijd regel 7?
Kan je het niet beter in een array zetten dan?

str = document.getElementById("textareaID").value;
arr = new Array();
arr = str.split("\n");

Maar ik weet niet zeker of \n werkt.
Zonee dan doe je dit

str = document.getElementById("textareaID").value;
arr = new Array();
str = str.replace(/\x0D\x0A/gi, "__enter__");
arr = str.split("__enter__");

En dan is het de vraag of je spaties in je naam mag hebben.
Zo ja, dan wordt het op deze manier lastig.
Dan zou je moeten zoeken naar ##.###.##§ op die regel, en tot dat is je nick.

Dus:
var Naam = arr[6].match(/^([\w\s]+?)\d{2}\.\d{3}\.\d{2}§/);

[ Voor 32% gewijzigd door Guillome op 07-05-2003 19:59 ]

If then else matters! - I5 12600KF, Asus Tuf GT501, Gigabyte Gaming OC 16G 5080 RTX, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 19-08 22:14

Bosmonster

*zucht*

str.split() is inderdaar de oplossing denk ik.. of je nu regels split op \n of woorden op spatie.

  • Jig
  • Registratie: Mei 2003
  • Laatst online: 29-07 16:06
wat ik tot nu heb: http://130.89.160.183/jig/upkeep.html
dat 2e boxje is om te testen of die echt werkt

maar XL, zou je kunnen uitleggen wat de code precies doet die jij uitlegt? vooral de laatste zin aub

en in de naam komen geen spaties voor

[ Voor 9% gewijzigd door Jig op 07-05-2003 20:42 ]


  • Guillome
  • Registratie: Januari 2001
  • Niet online

Guillome

test

Dan kan de laatste zin dit worden
var Naam = arr[6].match(/^(\w+?/);

Effe uitlegje

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Variabele aanmaken met de inhoud van de textarea
var str = document.getElementById("textareaID").value;

// Array aanmaken
arr = new Array();
// Alle enters van de TextArea omzetten naar een textreeks, omdat de zoekfuncties in strings anders niet goed werken.
str = str.replace(/\x0D\x0A/gi, "__enter__");

// Alle regels in een Array zetten.
arr = str.split("__enter__");

// Naam is de 7e regel.
// En daarvan pakt ie de match \w+?
// Dat is een Reguliere Expressie. \w betekend alleen lettes + leestekens. En dus geen cijfers en spaties. Als ie die vind, stopt ie met matchen.
var Naam = arr[6].match(/^(\w+?/);

If then else matters! - I5 12600KF, Asus Tuf GT501, Gigabyte Gaming OC 16G 5080 RTX, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 07-04 13:41
nou ben ik niet zo thuis in java script maar mischien ishet handig om even te zoeken naar reguliere expresies

van de laatste regel kon ik zosnel alleen \d{2}\.\d{3}\.\d{2}§ begrijpen
\d{2} wil zeggen (denk k) dat hij 2 decimalen moet zoeken, gevolgd door een punt (\.) gevolgd door 3 decimalen \d{3} dan een punt dan weer t decimalen en een paragraaf teken §

  • Guillome
  • Registratie: Januari 2001
  • Niet online

Guillome

test

Juust :)
(/^([\w\s]+?)
Dat was dat ie naar alle leestekens OF spaties ([\w\s]+?) moest zoeken aan het begin van de regel (^) totdat ie decimalen en punten tegenkomt (wat jij net zei).
En wat tussen haakjes staat (dus alle leestekens of spaties ) dat matcht ie.
Maar spatie hoeft niet, daarom was deze niet goed.

If then else matters! - I5 12600KF, Asus Tuf GT501, Gigabyte Gaming OC 16G 5080 RTX, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


  • Jig
  • Registratie: Mei 2003
  • Laatst online: 29-07 16:06
ik heb nu dus dit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<script language="javascript">

function computeForm(form) 
{ 
    str = document.getElementById("controlpl").value;
    arr = new Array();
    str = str.replace(/\x0D\x0A/gi, "__enter__");
    arr = str.split("__enter__");
    var user = arr[6].match(/^(\w+?/);
    document.form.output.value = user
}

function clearForm(form) 
{ 
    form.controlpl = "";
}

</script>


formpje:
code:
1
2
3
4
5
6
 <form method=post>
  <textarea id="controlpl" onfocus="select();" cols="30" rows="4"></textarea><br>
  <input type="text" size=10 name="output" onChange="computeField(this)" ><br>
  <input type="button" value="Calculate" onClick=computeForm(this.form)> 
  <input type="reset" value="Reset" onClick=clearForm(this.form)> 
 </form>


maar het werkt niet, er komt "null" uit
en als ik eerlijk ben, ik snap nog niet precies wat ie doet.
1. hij slaat de inhoud van het textveld op in een string
2. dan maak je een lege array
3. alle regels in een aparte array, of elke regel in een apart onderdeel van de array?
4. var Naam = array "deel" 6, maar wat dat match doet?

  • Guillome
  • Registratie: Januari 2001
  • Niet online

Guillome

test

Zie mijn twee posts boven je, in die 2 leg ik alles uit.
En vergeet niet om altijd var voor een variabele te zetten als die nog niet bestaat.
Dus:
var str = bla.value. // Alleen hier.
str.replace // hier niemeer :)

Maar ik zou zeggen, kijk hier eens voor regExp uitleg.
Probeer zelf eens iets, ik kijk strax wel even.

edit: Punt 3: urlletje

[ Voor 14% gewijzigd door Guillome op 07-05-2003 21:27 ]

If then else matters! - I5 12600KF, Asus Tuf GT501, Gigabyte Gaming OC 16G 5080 RTX, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


  • Guillome
  • Registratie: Januari 2001
  • Niet online

Guillome

test

function computeForm(form)
{
var str = document.getElementById("controlpl").value;
var arr = new Array();
str = str.replace(/\x0D\x0A/gi, "__enter__");
arr = str.split("__enter__");
var user = arr[6].match(/^(\w+)/gi);
document.getElementById("output").value = user;
}

If then else matters! - I5 12600KF, Asus Tuf GT501, Gigabyte Gaming OC 16G 5080 RTX, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


  • Jig
  • Registratie: Mei 2003
  • Laatst online: 29-07 16:06
hmm, welke letter is 0D en 0A?
en ik snap de str.replace line niet helemaal, hij vervangt iets met __enter__m en de split die zet alles voor en na een __enter__ in een deel van de array

en btw namen kunnen wel cijfers bevatten..!
de laatste zin zou dan niet het volgdene moeten worden??:
var Naam = arr[6].match(/^(\w/);

edit:
khad je 2e reply nog niet gelezen, hij werkt
nou ga ik is ff verder knutselen
owja 1 ding, ik wil aardig wat output geven, kan dat ook in een textarea, of als gewone html onderaan ofzo?

[ Voor 24% gewijzigd door Jig op 07-05-2003 21:57 ]


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

\w staat voor een 'word-character' en is equivalent aan [a-zA-Z0-9_], oftewel kleine letter a t/m z, hoofdletter A t/m Z, cijfers 0 t/m 9 en de underscore _
het plusje geeft aan: 1 of meer van deze karakters.
een dakje ^ betekent: begin aan het begin van de string, en hij houdt dus op als 'ie bijvoorbeeld een spatie tegenkomt :)

output naar een textarea is niet zo moeilijk, stel je hebt:

<textarea id="output"></textarea>

dan doe je gewoon:

document.getElementById('output').value = 'je text hier';

ook met een <div>'je kan het:

<div id="output"></div>

document.getElementById('output').innerHTML = 'je text hier';

:)

[ Voor 73% gewijzigd door crisp op 07-05-2003 22:09 ]

Intentionally left blank


  • Guillome
  • Registratie: Januari 2001
  • Niet online

Guillome

test

Enneh als je ook cijfers wil vervang je
var user = arr[6].match(/^(\w+)/gi);
door
var user = arr[6].match(/^([\w\d]+)/gi);
\d = digits :)

En die str = str.replace(/\x0D\x0A/gi, "__enter__");
Als je een textarea uitleest (.value) dan is een enter niet meer dan de ASCII code 13 en 10.
En met \x## match je op ASCII codes, in HEX code wel te verstaan.
13 = 0D, 10 = 0A.

If then else matters! - I5 12600KF, Asus Tuf GT501, Gigabyte Gaming OC 16G 5080 RTX, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

XLerator schreef op 07 May 2003 @ 22:28:
Enneh als je ook cijfers wil vervang je
var user = arr[6].match(/^(\w+)/gi);
door
var user = arr[6].match(/^([\w\d]+)/gi);
\d = digits :)
lees mijn verhaaltje hierboven eens: \w matched ook op cijfers ;)

Intentionally left blank


  • Guillome
  • Registratie: Januari 2001
  • Niet online

Guillome

test

:X 8)7 :{
Solly ;) :)

[ Voor 12% gewijzigd door Guillome op 07-05-2003 23:19 ]

If then else matters! - I5 12600KF, Asus Tuf GT501, Gigabyte Gaming OC 16G 5080 RTX, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


  • Jig
  • Registratie: Mei 2003
  • Laatst online: 29-07 16:06
Ok thnx!
Ik kom nu alleen bij een moeilijker probleem.
De text die gepaste word in de textarea bevat verscheidene delen, planeten met hun info. (het is een online text based spel :)) Het maximaal aantal planeten is 14, dus niet meer als 14 groepen. Maar je kan er ook minder hebben. Een andere complicatie is dat je niet altijd evenveel txt hebt, en dus niet altijd in dezelfde line. Je kan wel zoeken naar "Government system" (zie onder) want dat staat er altijd, bij elke groep bij.

code:
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
iexplorer div bug patchServer time: 2003-05-08 07:14:53 

Tech tree Controlled planets Galactic maps Discussion forums 
Fleets & armies Trading relations Infiltrations 
jigtar Cash 229,427,553§ Preferences Logout Help 
 

 Controlled planets  

 Adras (41,-17) [o.X] [CLV] 

Government system: Democratic (20)
Production type: Minero
Population race: Xillor size: 20687 M
Influence:    45.9M (79.7M) 
   Own forces  
Battle ships 10500  
Ground armies 100  
 

 Aldebard (43,-22) [o.X] [chat] 

Government system: Authoritarian (2)
Production type: Agro
Population race: Azterk size: 7765 M
Influence:   4.5M (10.2M) 
   Own forces Foreign forces 
Battle ships 10500 33754 
Ground armies 115 1


Als voorbeeld wil ik de 2 namen van de planeten hebben, "Adras" en "Aldebard". Je kan dus wel zoeken naar "Government" en dan een regel terug gaan (?). Hij zou dan dus moeten zoeken naar "government" wat maximaal 14x voorkomt, en dan de naam die ervoor staat opslaan...

Owja, ik heb van:
var user = arr[6].match(/^(\w+)/gi);
dit gemaakt:
var user = arr[6].match(/^(\S+)/gi);
er zijn ook mensen met puntjes in hun naam :)
Pagina: 1