Avatar billede herchin Nybegynder
20. september 2001 - 09:02 Der er 41 kommentarer og
2 løsninger

Streng manipulation

Jeg har en tekst der eksempelvis kan se således ud:

text = \"<P>Her er lidt tekst</P>
<P><OBJECT id=QFGAv4kiSkjcUcCMdiQJ name=Stamdata/Navn data=Files/condition.asp width=935 height=66 type=text/x-scriptlet></OBJECT></P>
<P><OBJECT id=QFGAv4kiSkjcUcCMdiQJ name=Stamdata/Navn data=Files/condition.asp width=935 height=66 type=text/x-scriptlet></OBJECT></P>
<P>Og lidt mere tekst</P>
<P><OBJECT id=QFGAv4kiSkjcUcCMdiQJ name=Stamdata/Navn data=Files/condition.asp width=935 height=66 type=text/x-scriptlet></OBJECT></P>\"

Hvordan kan jeg indsætte glyffer omkring alle attributter på alle mine <object> tags så teksten kommer til at se sådan ud: (Det skal lige siges, at der kan være et vilkårligt antal <object> tags!)

text = \"<P>Her er lidt tekst</P>
<P><OBJECT id=\"QFGAv4kiSkjcUcCMdiQJ\" name=\"Stamdata/Navn\" data=\"Files/condition.asp\" width=\"935\" height=\"66\" type=\"text/x-scriptlet\"></OBJECT></P>
<P><OBJECT id=\"QFGAv4kiSkjcUcCMdiQJ\" name=\"Stamdata/Navn\" data=\"Files/condition.asp\" width=\"935\" height=\"66\" type=\"text/x-scriptlet\"></OBJECT></P>
<P>Og lidt mere tekst</P>
<P><OBJECT id=\"QFGAv4kiSkjcUcCMdiQJ\" name=\"Stamdata/Navn\" data=\"Files/condition.asp\" width=\"935\" height=\"66\" type=\"text/x-scriptlet\"></OBJECT></P>\"

/Mvh
Herchin
Avatar billede herchin Nybegynder
20. september 2001 - 09:03 #1
Alle \" skal selvfølgeligt være \' ;o)
Avatar billede olebole Juniormester
20. september 2001 - 09:57 #2
<ole>
Sådan, som du har gjort! Hvad er problemet?
/mvh
</bole>
Avatar billede jakoba Nybegynder
20. september 2001 - 10:04 #3
Det er ligegyldigt for html-filen om du skriver \" eller \' omkring parametrene. Du skal blot sikre dig at du ikke kommer til at bruge samme slags citat-tengn inden i den parameter.

Så hvis filen genereres med ASP kan du blot skrive de ser \' tegn der du vil have dem.

mvh JakobA
Avatar billede herchin Nybegynder
20. september 2001 - 10:05 #4
Ovenstående er bare et eksempel på, hvordan strengen skal se ud efter at være rettet til! Jeg har manuelt indsat \" (som skulle have været \')
Avatar billede herchin Nybegynder
20. september 2001 - 10:13 #5
Jammen - det her er en string variabel, som skal manipuleres! Det er da lige meget, hvad jeg skal bruge den til ;o)
Avatar billede olebole Juniormester
20. september 2001 - 10:35 #6
herchin >> vi to kommer ånebart fra to forskellige solsystemer...det er anden gang indenfor et par dage, jeg ikke fatter, hvad du spørger om...!?!?!?!?
Det kunne ikke interessere mig mindre, hvad du skal bruge det til - men jeg aner ikke, hvad du spørger om  =)
/mvh
Avatar billede herchin Nybegynder
20. september 2001 - 10:42 #7
Hehehe ;o)

Ok forfra...

Jeg har en streng variabel

text = \"<P>Her er lidt tekst</P>
<P><OBJECT id=MdiQJ name=Stamdata/Navn data=Files/condition.asp width=935 height=66 type=text/x-scriptlet></OBJECT></P>
<P><OBJECT id=QFGAv4kiSkjcUcCMdiQJ name=Stamdata/Navn data=Files/condition.asp width=935 height=66 type=text/x-scriptlet></OBJECT></P>
<P>Og lidt mere tekst</P>
<P><OBJECT id=QFGAv4kiSkjcUcCMdiQJ name=Stamdata/Navn data=Files/condition.asp width=935 height=66 type=text/x-scriptlet></OBJECT></P>\"

Det jeg skal bruge er en funktion, som indsætter \' rundt om alle mine attributter i alle

Her er et simpelt eksempel på strengen efter funktionen har indsat \':

text = \"<object att1=\'asdf\' att2=\'asd\'></object>\";

Det er bare en helt almindelig string som skal have nogle \' sat ind på de rigtige steder.

Forstår du det nu? Ellers ved jeg ikke, hvordan vi to skal komme ud af det ;o)
Avatar billede olebole Juniormester
20. september 2001 - 10:54 #8
Eller er det bare mig, der kommer fra et andet solsystem(?): \"herchin >> vi to kommer ånebart...\"  *LooOooL*  Nu forstår jeg til gengæld, hvad du mener!  =oD

Det kan lettest laves med nogle regulære udtryk...det er jakoba bedre på end jeg (hvem er ikke det?...hehe!)
Du skal lave en lille funktion, der kan genkende de forskellige attributnavne, efterfulgt af \'=\' og en række tilfældige tegn. Disse tegn skal der så sættes gåseøjne omkring. Det kan gøres med loops/if-sætninger, og noget - men RegExp vil være mere sexy at bruge her  :)
/mvh
Avatar billede olebole Juniormester
20. september 2001 - 10:54 #9
jakooooooooooooooooooobaaaaaaaaaaaaaaaa............................
Avatar billede herchin Nybegynder
20. september 2001 - 11:17 #10
Jeg har lavet den her funktion, som egentligt gør det den skal, men jeg er ikke sikker på om den er helt optimal!!!

String.prototype.wellFormed = function wellFormed(text) {
  var s = this;
  var temp = \"\";

  var result = new String;
  while (s.length != 0) {
    pos = s.indexOf(\"<OBJECT id=\");
    if (pos == -1) {
      result += s.substring(0, s.length);
      s = \"\";
      break;
    }
    else {
      result += s.substring(0,pos);
      s = s.substring(pos, s.length);
      pos = s.indexOf(\">\");   
      temp = s.substring(0, pos + 1);
      temp = temp.replace(/ /gi,\"\' \");
      temp = temp.replace(/=/gi,\"=\'\");
      temp = temp.replace(/>/gi,\"\'>\");
      temp = temp.replace(/\' id/gi,\" id\");
      result += temp;
      s = s.substring(pos + 1, s.length + 1);
    }
  }
  return result;
}
Avatar billede herchin Nybegynder
20. september 2001 - 11:19 #11
Det ligner mest af alt: \"Gå over åen efter vand 2 gange og skyd en gråspurv med en kanon\" ;o)
Avatar billede olebole Juniormester
20. september 2001 - 11:21 #12
Når nu du *har* hentet vandet, kunne du så ikke lige drukne den squide gråspurv....så vi er helt sikre  :oD
Vi må hellere lade jakoba kikke  :)
Avatar billede jakoba Nybegynder
20. september 2001 - 12:33 #13
hershin >> din funktion ser ud til at virke, men hvis der er mange lange filer der skal behandles vil det tage laaang tid.

vi kan nøjes med en enket replace for hver parameter:

<script language=\'javascript\'>

var dinStreng = ?;        // stop din lange streng ind her.
                            // og kald funktionen fixStreng.


function fixParam ( navn, verdi ) { // hjælpefunktion
    var re = new Regexp( navn+\"=\"+verdi, \"gi\" );
    var subst = navn +\"=\'\" +verdi +\"\'\";
    dinStreng = dinStreng.replace( re, subst );
}; //end fixParam ( string, string )


function fixStreng ( ) {  // initier variablen  dinStreng før kald.

// ret linierne herunder til så de passer med dine attribut-navne og parametre
    fixParam( \"id\",  \"QFGAv4kiSkjcUcCMdiQJ\" );
    fixParam( \"name\",  \"Stamdata/Navn\" );        // se note 1 nedenfor !
    fixParam( \"data\",  \"Files/condition.asp\" );
    fixParam( \"width\", \"935\" );                  // se note 2 nedenfor.
    fixParam( \"height\", \"66\" );                  // se note 2 nedenfor.
    fixParam( \"type\",  \"text/x-scriptlet\" );

]; //end fixStreng ( )

// efter kald til  fixStreng()  indeholder variablen  dinStreng  den
// konverterede streng med \' om parameterværdierne.

</script>

note 1: værdien \"Stamdata/Navn\" er ikke et lovligt javascript navn, og vil give problemer hvis du prøver at bruge det som navn i javascript (bliver set som at variablen Stamdata skal divideres med variablen Navn).

note 2: Såvidt jeg ved kræver html-standarden ikke at der skrives \' omkring numeriske parametre. Jeg ville udelade fixParam på width og height.


Løsningen går ud fra at alle dine parametre gentages (eg: alle height parametre er 66)
Hvis der kun er få undtagelser kan du lave extra linier for parametre der er forskellige:
    fixParam( \"height\", \"66\" );  // de fleste er 66
    fixParam( \"height\", \"55\" );  // men der er også nogen der er 55
men hvis der er masser af undtagelser er \'løsningen\' ovenfor ligeså besværlig som at rette i hånden; der skal laves en linie i funktionen fixStreng for hver forskellig parameterværdi :(

mvh JakobA
Avatar billede herchin Nybegynder
20. september 2001 - 12:47 #14
Din løsning virker fint, men objekterne kan se helt forskellige ud hver gang ;(

Avatar billede jakoba Nybegynder
20. september 2001 - 13:49 #15
Hum.
kan du fortælle (meget præcist tak) hvad vi kan stole på, og hvad der kan variere i nedenstående linie:

<OBJECT id=QFGAv4kiSkjcUcCMdiQJ name=Stamdata/Navn data=Files/condition.asp width=935 height=66 type=text/x-scriptlet>

fx:
1) det er ikke blot den linie der skal fixes, det er også en masse andre html-parametre i andre kommandoer.
2) \"<OBJECT id=\" er fast, det står der altid
3) \"navn=Stamdata/Navn\" er altid det der står i den parameter
4) id= værdien har formatet \"QFG?????S?????CM??QJ\" hvor de bogstaver der er skrevet som ? kan variere.

osv...

mvh JakobA
Avatar billede herchin Nybegynder
20. september 2001 - 14:13 #16
Her er et par eksempler på, hvordan en tekst kan se ud med lidt forskellige objekter:

(Det skal siges, at hvis der eksisterer style attribut, så skal den bare fjernes => der er ikke brug for den! Cut, slet aldrig bruges)

<P>Her er lidt tekst</P>
<P><OBJECT id=qvJNyeHtv16rOpmBigxk style=\"LEFT: 5px; WIDTH: 935px; TOP: 5px; HEIGHT: 66px\" name=Stamdata/ID data=Files/condition.asp width=935 height=66 type=text/x-scriptlet></OBJECT></P>
<P>Her er også lidt tekst</p>
<P><OBJECT id=L8GqFws2rbUhInvhfssd name=Kontakt/EMAILACCEPT data=Files/condition.asp width=935 height=66 type=text/x-scriptlet></OBJECT>

<OBJECT id=6WV4EITg9jhCJYR75dvS name=Stamdata/NAVN data=Files/condition.asp width=935 height=66 type=text/x-scriptlet></OBJECT>

<OBJECT id=erIm2um7NIvQNBUarHDN style=\"LEFT: 9px; WIDTH: 935px; TOP: 264px; HEIGHT: 66px\" name=Stamdata/NAVN data=Files/condition.asp width=935 height=66 type=text/x-scriptlet></OBJECT>
Avatar billede herchin Nybegynder
20. september 2001 - 14:15 #17
Der mangler lige lidt <P> og </P> omkring objekterne!!!
Avatar billede herchin Nybegynder
20. september 2001 - 14:18 #18
Her er mit forslag til funktoinen (der er lidt bugs!!!)

String.prototype.wellFormed = function wellFormed() {
  var s = this;
  var style = \"\";
  var temp = \"\";

  //Find style
  pos1 = s.indexOf(\" style=\"); pos2 = s.indexOf(\'px\" \');
  while (pos1 != -1) {
    pos1 = s.indexOf(\" style=\"); pos2 = s.indexOf(\'px\" \');
    style = s.substring(pos1, pos2 + 3);
    s = s.substring(0, pos1) + s.substring(pos2 + 3, s.length);
  }

  var result = new String;
  while (s.length != 0) {
    pos = s.indexOf(\"<OBJECT id=\");
    if (pos == -1) {
      result += s.substring(0, s.length);
      s = \"\";
      break;
    }
    else {
      result += s.substring(0,pos);
      s = s.substring(pos, s.length);
      pos = s.indexOf(\">\");   
      temp = s.substring(0, pos + 1);
      temp = temp.replace(/ /gi,\"\' \");
      temp = temp.replace(/=/gi,\"=\'\");
      temp = temp.replace(/>/gi,\"\'>\");
      temp = temp.replace(/\' id/gi,\" id\");
      result += temp;
      s = s.substring(pos + 1, s.length + 1);
    }
  }
  return result;
}
Avatar billede jakoba Nybegynder
20. september 2001 - 14:46 #19
jeg tror stadig det kan fixes nemmere med regexp\'s men nu skal vi have den rigtige ekspert igang. Han hedder jumper.

jeg prøver at tvigge ham.

PS: min PC er nu gået totalt istå 2 gange mens jeg kikkede på det her spm (med NS6). og aldrig ellers. Der kan være mange andre grunde, men jeg vil holde mig væk til jeg ved noget mere om hvad der foregår.

mvh JakobA
Avatar billede jumper Nybegynder
20. september 2001 - 14:57 #20
Tja, jeg kan da komme med et par forslag:

nyText = text.replace(/=([^\\b]+)/g,\"=\'$1\'\");

eller

nyText = text.replace(/=([^\\s]+)/g,\"=\'$1\'\");

eller

nyText = text.replace(/=([^\\x20]+)/g,\"=\'$1\'\");

/Thor
Avatar billede herchin Nybegynder
20. september 2001 - 15:17 #21
Øhhhhh - det fatter jeg jo ikke ;o) Det virker altså ikke helt som det skal, men det er faktisk tæt på!!! Den efterlader dog \"style\" og sætter nogle forkerte \'.
Avatar billede jumper Nybegynder
20. september 2001 - 15:18 #22
Okay, kan du finde et (kort) eksempel på en streng du vil have ændret, samt hvad den bliver ændret til med de 3 ovenstående forslag ?

/Thor
Avatar billede herchin Nybegynder
20. september 2001 - 15:39 #23
Det her er strengen:

<P>Her er lidt tekst</P><P><OBJECT id=nJqBy3wmlw79powqc7Rt style=\"LEFT: 5px; WIDTH: 935px; TOP: 5px; HEIGHT: 66px\" name=Stamdata/NAVN data=Files/condition.asp width=935 height=66 type=text/x-scriptlet></OBJECT></P><P>Her er lidt tekst</P><P>Her er lidt tekst</P><P>&nbsp;</P><P><OBJECT id=Eep2JJR3HYUTIX2nl5Ca style=\"LEFT: 5px; WIDTH: 935px; TOP: 128px; HEIGHT: 66px\" name=Kontakt/EMAILACCEPT data=Files/condition.asp width=935 height=66 type=text/x-scriptlet></OBJECT></P><P>Her er lidt tekst</P><P>&nbsp;</P><OBJECT id=BJ9dENWxtXhbLFqWCiHb name=Kontakt/EMAILACCEPT data=Files/condition.asp width=935 height=66 type=text/x-scriptlet></OBJECT><P>Her er lidt tekst</P><P>Her er lidt tekst</P>

Og sådan skal den se ud: (Læg mærke til \' og <P> og </P> og styles)

<P>Her er lidt tekst</P><P><OBJECT id=\'nJqBy3wmlw79powqc7Rt\' name=\'Stamdata/NAVN\' data=\'Files/condition.asp\' width=\'935\' height=\'66\' type=\'text/x-scriptlet\'></OBJECT></P><P>Her er lidt tekst</P><P>Her er lidt tekst</P><P>&nbsp;</P><P><OBJECT id=\'Eep2JJR3HYUTIX2nl5Ca\' name=\'Kontakt/EMAILACCEPT\' data=\'Files/condition.asp\' width=\'935\' height=\'66\' type=\'text/x-scriptlet\'></OBJECT></P><P>Her er lidt tekst</P><P>&nbsp;</P><P><OBJECT id=\'BJ9dENWxtXhbLFqWCiHb\' name=\'Kontakt/EMAILACCEPT\' data=\'Files/condition.asp\' width=\'935\' height=\'66\' type=\'text/x-scriptlet\'></OBJECT></P><P>Her er lidt tekst</P><P>Her er lidt tekst</P>

Avatar billede jumper Nybegynder
20. september 2001 - 15:42 #24
Okay, så den skal også fjerne style=\"noget\" fra strengen ? For den del kan jeg ikke se i det \"rettede\" ...

/Thor
Avatar billede herchin Nybegynder
20. september 2001 - 15:48 #25
Det har du ret i! Hvis det ikke kan lade sig gøre, så bare efterlad style=\"noget\"!
Avatar billede jumper Nybegynder
20. september 2001 - 15:49 #26
Så skulle det vist virke med:

nyText = text.replace(/=([^\"\\s>]+)/g,\"=\'$1\'\");

Du kan se det i aktion på:

http://jscript.dk/Jumper/Eksperten/111464.html

/Thor
Avatar billede jumper Nybegynder
20. september 2001 - 15:51 #27
Skal jeg også fjerne style=\"noget\" ?

/Thor
Avatar billede herchin Nybegynder
20. september 2001 - 15:54 #28
Meget gerne!
Avatar billede herchin Nybegynder
20. september 2001 - 15:56 #29
Iøvrigt kunne det være rart om de der <P>&nbsp;</P> også bliver fjernet ;o)
Avatar billede herchin Nybegynder
20. september 2001 - 15:58 #30
Jeg kan se en lille fejl... Der mangler <P> og </P> omkring objekterne!
Avatar billede jumper Nybegynder
20. september 2001 - 16:11 #31
Okay, så er style blokke også fjernet, samt tomme P blokke.

nyText = nyText.replace(/ style=\"[^\"]+\"/gi,\"\"); // Remove style blocks

nyText = nyText.replace(/<P>&nbsp;<\\/P>/gi,\"\"); // Remove empty P blocks

Kig ind på

http://jscript.dk/Jumper/Eksperten/111464.html

igen og se om tingene er som de skal være.

/Thor
Avatar billede herchin Nybegynder
20. september 2001 - 16:16 #32
En tiny-winy fejl: Omkring alle objekter skal der være <P><object \"en masse attributter\"></object></P>

Det her er for vildt - hvordan gør du det og hvor kan man lære det henne?
Avatar billede jumper Nybegynder
20. september 2001 - 16:19 #33
Ehrm, så vidt jeg kan se _er_ der <P></P> omkring <object> tags ..

Og derudover, så hedder det Regular Expressions - du kan bl.a. læse mere om sådan nogle tingester på

http://msdn.microsoft.com/scripting/jscript/doc/reconIntroductionToRegularExpressions.htm
http://msdn.microsoft.com/scripting/jscript/doc/jsgrpregexpsyntax.htm
http://msdn.microsoft.com/scripting/jscript/doc/jsobjregexpression.htm
http://msdn.microsoft.com/scripting/jscript/doc/jsobjRegExp.htm

Og hvis du er helt hooked, er der en meget omfattende bog omkring emnet på

http://jscript.dk/download/masteringregexp.zip

/Thor
Avatar billede herchin Nybegynder
20. september 2001 - 16:30 #34
Hvis du kigger på det sidste object-tag, så mangler det <P> og </P> omkring!

http://jscript.dk/Jumper/Eksperten/111464.html
Avatar billede herchin Nybegynder
20. september 2001 - 16:33 #35
Iøvrigt så er jeg vist helt hooked ;o)
Avatar billede herchin Nybegynder
20. september 2001 - 16:36 #36
Jeg giver lige point i morgen tid til at tage fri fra arbejde ;o)
Avatar billede herchin Nybegynder
21. september 2001 - 12:43 #37
Juuuuuuuuuummmmmmmmmmmmmmmmmmmmmbeeeeeeeeeeeeeeeeeeer - hvor er du????
Avatar billede jumper Nybegynder
21. september 2001 - 13:05 #38
heerchin - er da lige her :)

Mangler der noget nu ?

/Thor
Avatar billede herchin Nybegynder
21. september 2001 - 14:34 #39
Hvis du kigger på det sidste object-tag, så mangler det <P> og </P> omkring!

http://jscript.dk/Jumper/Eksperten/111464.html
Avatar billede jumper Nybegynder
21. september 2001 - 14:48 #40
Så skulle den også være fikset :)

/Thor
Avatar billede olebole Juniormester
21. september 2001 - 14:58 #41
\'jscript.dk\'  *LooOooL*  Ja, selvfølgelig har du da fået det raget til dig!  =oD
Avatar billede herchin Nybegynder
21. september 2001 - 15:29 #42
Det er sejt!!! 1000000000000000 thx ;o)
Avatar billede jakoba Nybegynder
21. september 2001 - 16:11 #43
Meget sejt. :-)) og points fik man ovenikøbet. takker
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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