Avatar billede c-lund Nybegynder
14. oktober 2005 - 12:09 Der er 57 kommentarer og
1 løsning

Replace vbCrlf

Hej


Jeg skal smide noget tekst i en database og skal derfor have skiftet vbCrlf ud med et <br> og omvendt. men kan ikke få det til at virke, jeg bruger nemlig ikke Vbscript men Jscript. er der nogle der kan hjælpe
Avatar billede softspot Forsker
14. oktober 2005 - 12:23 #1
i JScript hedder det "\n", men ellers burde du kunne benytte replace på den streng hvori linieskift skal udskiftes...
Avatar billede c-lund Nybegynder
14. oktober 2005 - 12:32 #2
sådan her? Tekst1 = Tekst.replace("\n", "<br>", "");
Avatar billede c-lund Nybegynder
14. oktober 2005 - 12:33 #3
for denne fejl:
Microsoft JScript runtime error '800a01b6'

Object doesn't support this property or method
Avatar billede softspot Forsker
14. oktober 2005 - 12:35 #4
Umiddelbart ville jeg prøve dette (utestet):

Tekst1 = Tekst.replace("\n", "<br>");

da strengen ligger i Tekst og der derfor ikke skal specificeres en parameter til strengen (jeg ved ikke lige hvad den sidste parameter var tiltænkt?)
Avatar billede c-lund Nybegynder
14. oktober 2005 - 12:38 #5
jeg for stadig samme fejl. er Replace sætningen skrevet rigtigt?
Avatar billede softspot Forsker
14. oktober 2005 - 12:44 #6
Det ser egentlig korrekt ud, men det kan være du SKAL bruge regular expressions (selvom MS-dokumentationen for JScript's replace siger at det er OK med en streng).

Tekst1 = Tekst.replace(/\n/g, "<br>");

Det lyder dog lidt som om Tekst ikke er en streng (idet fejlen melder at funktionen ikke understøttes af det aktuelle objekt). Er du sikker på at variablen Tekst det en streng?

Jeg skal jo spørge, men du er opmærksom på at JScript er case-sensitivt, ikk'?
Avatar billede c-lund Nybegynder
14. oktober 2005 - 12:47 #7
tekst for jeg fra en formular Tekst = Request("TekstForm");
Avatar billede c-lund Nybegynder
14. oktober 2005 - 12:47 #8
er ikke så meget inde i Jscript, kan kun det basale
Avatar billede softspot Forsker
14. oktober 2005 - 12:52 #9
OK, men umiddelbart skal du sikre dig at Tekstform rent faktisk returnerer en streng, eller i det mindste at Tekst ikke er udefineret. Det kan du gøre ved at foretage flg. check inden du foretager replace:

if(Tekst)
  Tekst1 = Tekst.replace(/\n/g, "<br>");
else
  Tekst1 = "";
Avatar billede ldanielsen Nybegynder
14. oktober 2005 - 12:53 #10
Hvorfor vil du overhovedet have linieskiftene erstattet med <br>??

Jeg har da altid gemt dem i databasen som de er, og så erstattet hvis teksten skulle vises på en webside
Avatar billede softspot Forsker
14. oktober 2005 - 12:55 #11
Men det ændrer vel ikke på at der skal erstattes på et eller andet tidspunkt...?
Avatar billede c-lund Nybegynder
14. oktober 2005 - 12:56 #12
det er til et admin system, ham der skal bruge det, kan ikke noget kode.

jeg for stadig samme fejl
Avatar billede c-lund Nybegynder
14. oktober 2005 - 12:57 #13
er det ikke noget med at man kan skriver noget i stil med Tekst = Request("TekstForm").values;?
Avatar billede c-lund Nybegynder
14. oktober 2005 - 13:00 #14
men det er underligt, for jeg har brugt denne sætning før, og det har virket fint billeder1 = billeder1.replace("Oe", "Ø", "");. kan det havde noget med den server det ligger på at gøre, altså at den ikke understøtter det
Avatar billede softspot Forsker
14. oktober 2005 - 13:03 #15
Jeg har sådan en eller anden religiøs holdning til at bruge den korte form til hente data ud af request-objektet med - jeg synes ikke det er optimalt og vil ikke anbefale det hvis man ved hvor data skal hentes fra, for det performer dårligere, idet Request-objektet søger igennem alle sine collections for at finde det man søger. Brug i stedet den direkte vej:

Tekst = Request.Form("TekstForm");
Avatar billede softspot Forsker
14. oktober 2005 - 13:04 #16
Var der noget i feltet (jf. min kommentar 14/10-2005 12:52:00)?
Avatar billede idiotbarn Nybegynder
14. oktober 2005 - 13:04 #17
Er der ikke en ToString() i jscript. Det vil jeg da regne med...

Tekst = Request("TekstForm").ToString();
Avatar billede c-lund Nybegynder
14. oktober 2005 - 13:05 #18
ok
Avatar billede c-lund Nybegynder
14. oktober 2005 - 13:06 #19
det siger den fejl til
Avatar billede softspot Forsker
14. oktober 2005 - 13:06 #20
Den hedder toString()
Avatar billede c-lund Nybegynder
14. oktober 2005 - 13:08 #21
det vil den stadig ikke
Avatar billede softspot Forsker
14. oktober 2005 - 13:12 #22
Prøv lige at vise den form du poster. Det lyder super meget som om feltet ikke eksisterer, men jeg synes du undgår at svare på om der er indhold i feltet...
Avatar billede c-lund Nybegynder
14. oktober 2005 - 13:15 #23
der er indhold i feltet, for den kan godt skrive til databasen.

<form method="POST" action="add_news.asp">

        <input type="hidden" name="S1" size="20" value="<%Response.write("" + S1 + "");%>">
        <p><font size="1" face="Verdana" color="#313131">Dato</font><br>
    <input type="text" name="DatoForm" size="20" value=""><font size="1" face="Verdana" color="#313131"><br>
        <br>
        Tekst</font><br>
        <textarea rows="5" name="TekstForm" cols="21"></textarea><br>
        <br>
    <input type="submit" value="OK" name="B1"></p>
</form>
Avatar billede softspot Forsker
14. oktober 2005 - 13:27 #24
Ja, i.o.m. det er et textarea, så vil den under alle omstændigheder eksistere i Request.Form-collection, så det vil jeg give dig ret i.

Hvis du prøver at udskrive typen af Tekst efter du har hentet værdien fra Request.Form, hvad siger den så?

var Tekst = Request.Form("TekstForm");
Response.Write("Typen er: " + typeof(Tekst));
Avatar billede c-lund Nybegynder
14. oktober 2005 - 13:29 #25
den siger = Typen er: object
Avatar billede softspot Forsker
14. oktober 2005 - 13:38 #26
Prøv lige at smide den igennem denne mølle:

function objTest(obj){
  var i, t, s = "";  // Create variables.
  t = new Array();  // Create an array.
  t["Date"] = Date;  // Populate the array.
  t["Object"] = Object;
  t["Array"] = Array;
  t["String"] = String;
      for (i in t)
      {
        if (obj instanceof t[i])  // Check class of obj.
        {
            s += "obj is an instance of " + i + "\n";
        }
        else
        {
            s += "obj is not an instance of " + i + "\n";
        }
  }
  return(s);  // Return string.
}

var Tekst = Request.Form("TekstForm");
Response.Write(objTest(Tekst));
Avatar billede c-lund Nybegynder
14. oktober 2005 - 13:41 #27
obj is not an instance of Date obj is not an instance of Object obj is not an instance of Array obj is not an instance of String
Avatar billede softspot Forsker
14. oktober 2005 - 13:49 #28
Hmmm... interessant!?

Hvad nu hvis du skriver

Response.Write("Valueof Tekst: " + Tekst.valueOf());
Avatar billede softspot Forsker
14. oktober 2005 - 13:49 #29
Man mangler lige VBScript's Typename ;-)
Avatar billede c-lund Nybegynder
14. oktober 2005 - 13:51 #30
Object doesn't support this property or method
Avatar billede thomas_yde Nybegynder
14. oktober 2005 - 13:53 #31
Hvis jeg må indskyde noget så vil jeg ikke benytte mig af den metode du vil bruge.

Jeg ville putte teksten fra tekstfeltet ned i databasen efter et par moduleringer, som fx. replace(tekst,"'","''") så du undgår en databasefejl ved insert.

Dernæst vil jeg først replace vbCrlf når jeg vil udskrive teksten. Det spare en oprydning + hvis du senere skal redigere teksten i et tekstfelt skal du ikke lave <br> om til vbCrlf eller \n.
Avatar billede c-lund Nybegynder
14. oktober 2005 - 13:56 #32
hvordan gør mand det
Avatar billede softspot Forsker
14. oktober 2005 - 13:57 #33
Jeg fatter ikke en reje!?? Jeg kan ikke lige gennemskue hvad der går galt.

Jeg er enig med thomas_yde mht. metoden, men siden du insisterer på at dette skal gøres vil jeg jo gerne se om jeg kunne hjælpe dig med at få det til at fungere... hvilket så ikke lykkes særlig godt :|
Avatar billede softspot Forsker
14. oktober 2005 - 13:58 #34
Kan du i øvrigt skrive teksten ud hvis du tager den direkte fra Request.Form("TekstForm")?

Response.Write(Request.Form("TekstForm"))
Avatar billede c-lund Nybegynder
14. oktober 2005 - 14:09 #35
hvis vi gør det på den anden måde. så henter jeg data ud fra databasen. gemmer det i en variable der hedder "Tekst" og laver en replace på den.
Tekst1 = Tekst.replace(/\n/g, "<br>");
Response.write(Tekst);
eller hvordan?
Avatar billede c-lund Nybegynder
14. oktober 2005 - 14:24 #36
hvis jeg laver et udtræk fra databasen, virker det hvis jeg gør sådan her
Tekst = res.Fields("Tekst").Value;
Tekst1 = Tekst.replace("\n", "<br>", "");

men tak for hjælpen :)
Avatar billede ldanielsen Nybegynder
14. oktober 2005 - 22:57 #37
Det har den anden fordel, at hvis dine data skal bruges andre steder end i html på et tidspunkt, så har du ingen problemer med htmlkoder.

Du kan vælge at gemme teksten i html i databasen, hvis du vil gemme det formatteret, med fed skrift eller kursiv, eller punktopstillinger, tabeller osv.
Avatar billede c-lund Nybegynder
15. oktober 2005 - 17:44 #38
Jeg har lige et andet spørgsmål, når jeg bruger denne sætning
Tekst1 = Tekst.replace("\n", "<br>", "");

laver den kun et <br> ved det første "enter" skift.
altså:
Dette
er en test
------------
hvor det skulle have set sådan ud:
Dette
er
en
test
--------
hvad er det galt?
Avatar billede softspot Forsker
15. oktober 2005 - 18:26 #39
Hvad nu hvis du skriver:

Tekst1 = Tekst.replace(/\n/g, "<br>", "");
Avatar billede c-lund Nybegynder
15. oktober 2005 - 18:28 #40
så laver den ikke linie skift overhoved
Avatar billede softspot Forsker
15. oktober 2005 - 18:33 #41
Hvad så med denne her da:

var re = /\n/g;
Tekst1 = Tekst.replace(re, "<br>", "");
Avatar billede c-lund Nybegynder
15. oktober 2005 - 18:37 #42
den laver stadig ikke linieskift
Avatar billede softspot Forsker
15. oktober 2005 - 18:41 #43
Hmmm... det kunne være jeg bare skulle holde mig væk fra denne tråd - det er vist det rene pladsspilde... :|

Kan du evt. prøve at vise den kode der ikke fungerer?
Avatar billede c-lund Nybegynder
15. oktober 2005 - 20:16 #44
<%
      ConOpenArg = "";               
    Connection= Server.CreateObject("ADODB.connection");   
    ConOpenArg = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" + Server.MapPath("../database/steinray.mdb");   
    Connection.open(ConOpenArg);
 
 
    sqlStatement =
    "SELECT Dato, Tekst from News";
     
 

    res = Connection.Execute(sqlStatement);


    if(res.BOF || res.EOF)
        {
        Response.write("<font size=1 color=ffffff face=verdana>Ingen nyheder i øjeblikket</font>");   
        }
       
        else
        {
        res.MoveFirst();
        while(!res.EOF)
        {
          Dato = res("Dato");
          Tekst = res.Fields("Tekst").Value;
        Tekst1 = Tekst.replace("\n", "<br>", "");
           
                Response.write("<table border=0 width=88% cellspacing=0 cellpadding=0><tr><td>");
                Response.write("&nbsp;<font size=1 color=ffffff face=verdana><u><b>" + Dato + "</b></u></font>");
                Response.write("</td></tr><tr><td>");   
                Response.write("&nbsp;<font size=1 color=ffffff face=verdana>" + Tekst1 + "</font>");   
                Response.write("</td></tr></table>");
 
        res.MoveNext();
      }
      }
   
Connection.close();
%>
Avatar billede c-lund Nybegynder
15. oktober 2005 - 20:18 #45
kan det ikke være at den skal løbe igennem en "for" lykke. men dem har jeg ikke lige styr på
Avatar billede softspot Forsker
15. oktober 2005 - 20:28 #46
Det her er testet, så det skal sq fungere:

var Tekst1 = Tekst.replace(/\n/gim,"<br>");
Avatar billede c-lund Nybegynder
15. oktober 2005 - 20:31 #47
Cool, så virker det endelig :-) tak for hjælpen :)
Avatar billede softspot Forsker
15. oktober 2005 - 20:40 #48
Pyha! Det holdt hårdt - men på den anden side, hvis man bare havde testet fra starten havde du jo været meget længere nu... :|
Avatar billede c-lund Nybegynder
15. oktober 2005 - 20:42 #49
ja, men sådan er det, bare det bliver løst :)
Avatar billede softspot Forsker
15. oktober 2005 - 20:45 #50
Tak for point (og din forståelse) :)
Avatar billede c-lund Nybegynder
15. oktober 2005 - 20:49 #51
er lige støt på et lign. problem :|
Tekst1 = Tekst.replace("'","&#39");

for denne fejl:
Object doesn't support this property or method
Avatar billede c-lund Nybegynder
15. oktober 2005 - 20:58 #52
teksten kommer fra en fomular
Avatar billede thomas_yde Nybegynder
17. oktober 2005 - 09:52 #53
Hvis jeg må indskyde noget igen. Hvorfor bruger du ikke ASP til at replace de ulovlige tegn med?
Tekst1 = Replace(Tekst,"'","''")
Avatar billede softspot Forsker
17. oktober 2005 - 09:57 #54
JScript er også ASP...(?)
Avatar billede softspot Forsker
17. oktober 2005 - 09:58 #55
Anyway! Kan du ikke bare gøre sådan:

Tekst1 = Tekst.replace(/'/gmi,"&#39;");
Avatar billede c-lund Nybegynder
17. oktober 2005 - 14:30 #56
hey, jeg fandt ud af det selv, men tak alligevel :)
Tegn = /(\')/g; 
Dato = Dato.replace(Tegn, "&#39");
Avatar billede softspot Forsker
17. oktober 2005 - 14:46 #57
Du skal vel stadig have semikolon med efter &#39; for at det bliver et validt tegn...
Avatar billede c-lund Nybegynder
17. oktober 2005 - 16:28 #58
det ved jeg ikke, men det virker. jeg må hellere sætte det ind. tak :)
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
Kategori
Kurser inden for grundlæggende programmering

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