Vinnaren i pepparkakshustävlingen!
  • 1
  • 2
2017-08-23, 22:06
  #13
Medlem
Kör strängen via nån reader, kolla ifall detta index är ett mellanslag, är det ett, kolla ifall nästa är(typ peek() eller så), ifall det stämmer, ändra första space till ickespace, osv.
Citera
2017-08-24, 12:08
  #14
Moderator
Protons avatar
Går det inte att frisera till den med nån regex?
Citera
2017-08-25, 19:41
  #15
Medlem
MataRengis avatar
Det här problemet förutsätter att citationstecken finns parvis, dvs har ett jämnt antal. Finns det ströfnuttar så skiter det sej.

Studera följande sträng;
Citat:
Han kläckte ur sej: " Jag sa ju till dej, "kära" sneseglare, att köpa 2"4-brädor från virkesavdelningen! ", jodå, precis så sa han!
...så kommer det att skita sej.

Men bortsett från strängar med udda fnuttar så
A: Plocka fram två förekomster av fnuttar.
B: Trimma allt mellan dessa.
C: Och håll på så länge du hittar nåt enligt A.
så fungerar det och det är inte allt för svårt att få ihop i vilket språk som helst.
Citera
2017-09-12, 13:57
  #16
Medlem
Citat:
Ursprungligen postat av MataRengi
Det här problemet förutsätter att citationstecken finns parvis, dvs har ett jämnt antal. Finns det ströfnuttar så skiter det sej.

Studera följande sträng;

...så kommer det att skita sej.

Men bortsett från strängar med udda fnuttar så
A: Plocka fram två förekomster av fnuttar.
B: Trimma allt mellan dessa.
C: Och håll på så länge du hittar nåt enligt A.
så fungerar det och det är inte allt för svårt att få ihop i vilket språk som helst.


Grejen är att jag ska dessutom ha en liknande funktion i VBScript.
Har provat skriva ihop följande, men får fel. Vad beror det på?


Public Function TrimQuotes(quoteString)

Dim currentIndex As Integer
currentIndex = 1

Dim newString As String

Do While (True)

Dim startIndex As Integer
startIndex = InStr(currentIndex, quoteString, Chr(34))
If startIndex < 1 Then
Exit Do
End If

Dim endIndex As Integer
endIndex = InStr(startIndex + 1, quoteString, Chr(34))
If endIndex < 1 Then
Exit Do
End If

Dim startLength As Integer
startLength = Len(quoteString)


newString = Mid(quoteString, 1, startIndex + 1) & Trim(Mid(quoteString, startIndex + 1, endIndex - startIndex)) & Mid(quoteString, endIndex)

currentIndex = endIndex + 1 + Len(quoteString) - startLength
Loop

TrimQuotes = newString
End Function
Citera
2017-09-13, 07:22
  #17
Medlem
MataRengis avatar
Citat:
Ursprungligen postat av PN
Grejen är att jag ska dessutom ha en liknande funktion i VBScript.
Har provat skriva ihop följande, men får fel. Vad beror det på?


Public Function TrimQuotes(quoteString)

Dim currentIndex As Integer
currentIndex = 1

Dim newString As String

Do While (True)

Dim startIndex As Integer
startIndex = InStr(currentIndex, quoteString, Chr(34))
If startIndex < 1 Then
Exit Do
End If

Dim endIndex As Integer
endIndex = InStr(startIndex + 1, quoteString, Chr(34))
If endIndex < 1 Then
Exit Do
End If

Dim startLength As Integer
startLength = Len(quoteString)


newString = Mid(quoteString, 1, startIndex + 1) & Trim(Mid(quoteString, startIndex + 1, endIndex - startIndex)) & Mid(quoteString, endIndex)

currentIndex = endIndex + 1 + Len(quoteString) - startLength
Loop

TrimQuotes = newString
End Function

En god kutym är att visa din kod korrekt indenterat. Gör det och jag ska titta på det.
Till dess - vad får du för fel?
Citera
2017-09-13, 08:26
  #18
Medlem
Citat:
Ursprungligen postat av MataRengi
En god kutym är att visa din kod korrekt indenterat. Gör det och jag ska titta på det.
Till dess - vad får du för fel?

Indenterat?

Returvärdet blir fel.
Citera
2017-09-13, 10:33
  #19
Medlem
inneskos avatar
Citat:
Ursprungligen postat av PN
Indenterat?

Returvärdet blir fel.

Indenterat
Citera
2017-09-13, 10:47
  #20
Medlem
Citat:
Ursprungligen postat av innesko
Indenterat

Kod:
Public Function TrimQuotes(quoteString)

     Dim currentIndex As Integer
     currentIndex = 1

     Dim newString As String

     Do While (True)

           Dim startIndex As Integer
           startIndex = InStr(currentIndex, quoteString, Chr(34))
          
           If startIndex < 1 Then
                Exit Do
           End If

           Dim endIndex As Integer
           endIndex = InStr(startIndex + 1, quoteString, Chr(34))
 
           If endIndex < 1 Then
                Exit Do
           End If

           Dim startLength As Integer
           startLength = Len(quoteString)

           newString = Mid(quoteString, 1, startIndex + 1) & Trim(Mid(quoteString, startIndex + 1, endIndex - startIndex)) & Mid(quoteString, endIndex)

           currentIndex = endIndex + 1 + Len(quoteString) - startLength
      Loop
  
      TrimQuotes = newString

 End Function
__________________
Senast redigerad av PN 2017-09-13 kl. 11:00.
Citera
2017-09-13, 11:06
  #21
Medlem
MataRengis avatar
Citat:
Ursprungligen postat av PN
Returvärdet blir fel.

Vad får du för returvärde? Vad förväntar du dej för returvärde?
Kan du köra funktionen rad för rad och se var variablerna inte får det värde du förväntade?
Citera
2017-09-13, 11:18
  #22
Medlem
Citat:
Ursprungligen postat av MataRengi
Vad får du för returvärde? Vad förväntar du dej för returvärde?
Kan du köra funktionen rad för rad och se var variablerna inte får det värde du förväntade?

Körning ger:
Citat:
det här är ett meddelande som innehåller " för många mellanslag"", eller hur?


Vill hellre ha:
Citat:
det här är ett meddelande som innehåller "för många mellanslag", eller hur?
Citera
2017-09-13, 12:21
  #23
Medlem
inneskos avatar
Citat:
Ursprungligen postat av PN
Körning ger:



Vill hellre ha:

Jag har ingen möjlighet att testa om detta kommer fungera, men jag tror du kan ta bort newString helt och hållet och där du har skrivit newString så skriver du quoteString istället.
Citera
  • 1
  • 2

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback