Pytanie Coldfusion: jak podzielić łańcuch na zbiór zmiennych


Próbuję uczyć się ColdFusion.

Mam ciąg przychodzący z bazy danych w tym formacie:

domain.com
<br/>
www.facebook.com/facebookpage
<br/>
http://instagram.com/instagrampage

Wszystko pochodzi z # getRacer.txtDescription #. Format tego tekstu będzie zawsze taki sam.

Muszę podzielić go na 3 zmienne. Próbowałem tego (na podstawie przykładu na stronie internetowej Adobe)

<h3>ListToArray Example</h3>
<cfset myList = ValueList(getRacer.txtDescription)>
<p>My list is a list with <cfoutput>#ListLen(myList)#</cfoutput> elements.
<cfset myArrayList = ListToArray(myList,'<br/>')>
<p>My array list is an array with 
<cfoutput>#ArrayLen(myArrayList)#</cfoutput> elements.

Jakoś znalazłem 11 elementów w tablicy.

Dziękuję Ci


14
2018-05-15 00:11


pochodzenie


Ile elementów było na twojej liście? - Dan Bracuk
możesz też zrobić replace(myList,'<br>',',','all') przekształcić go w prawdziwą listę, a następnie nie musisz polegać na podstawowych metodach Java - Matt Busche
"prawdziwa lista" - to nonsensowne zdanie; nie ma "prawdziwej" listy. Przecinek jest jedynie domyślnym ogranicznikiem dla funkcji manipulowania ciągiem List ~. - Peter Boughton


Odpowiedzi:


To powinno działać.

<cfset TestSTring = "domain.com<br/>www.facebook.com/facebookpage<br/>http://instagram.com/instagrampage">

<cfset a = TestString.Split("<br/>")>

Powód ListtoArray wyświetla 11 pozycji, ponieważ ColdFusion traktuje każdy znak w ciągu separatora (<br/>) jako oddzielny ogranicznik

Na podstawie komentarza @ Leigh'a aktualizuję moją odpowiedź, aby zapewnić ludziom możliwość uczenia się interfejsów API Coldfusion zamiast korzystania z funkcji Java, <cfset a = ListToArray(TestString, "<br/>", false, true)> również zadziała. Dzięki Leigh.

Uwaga: The false na końcu jest dla includeEmptyFields flaga i true jest dla multiCharacterDelimiter flaga. Zobacz dokumentację.


21
2018-05-15 00:19



Wygląda na to, że Split jest funkcją Java. To jest interesujące a jest w rzeczywistości tablicą CF ciągów, a nie jakimś obiektem Java - James A Mohler
W tym przypadku nie ma potrzeby korzystania z funkcji java. CF9 + obsługuje separatory wieloliterowe: listToArray(..., multiCharacterDelimiter). - Leigh
@JamesAMohler - Właściwie to jest obiekt java: String[]. Chociaż jest podobny do tablicy CF i może być używany z większością funkcji tablic CF, istnieją pewne niewielkie różnice. W przeciwieństwie do tablicy CF, jest niezmienna, więc nie można dodawać ani usuwać elementów. - Leigh
Jack - Jeśli dopiero uczysz się CF, możesz na razie opuścić rzeczy napisane w Javie. Skoncentruj się na nauce podstawowych funkcji w pierwszej kolejności. Zwykle zalecam ludziom uważne zapoznanie się z API przed użyciem podstawowych funkcji java. The split() metoda akceptuje wyrażenie regularne (nie tylko zwykły ciąg znaków), więc niektóre znaki muszą zostać zmienione. Ponadto, w przeciwieństwie do większości funkcji CF, rozróżniana jest wielkość liter. Różnice zaskakują niektórych ludzi, a następnie drapią się po nieoczekiwanych rezultatach. - Leigh
Nie wiem, czy powiedziałbym mu, żeby całkowicie pominął funkcje Java, szczególnie funkcje String. Funkcje Java String są dużą częścią tego, co sprawia, że ​​Java jest tak potężna w CF. Co więcej, są one zazwyczaj dużo szybsze niż funkcje CF. Wrzucenie odrobiny Javy do miksu sprawi, że CF będzie trochę bardziej skomplikowany do nauczenia się, ale myślę, że ogólnie sprawi, że będzie bardziej wszechstronnym programistą CF. - Shawn


<cfset myList = ReplaceNoCase(getRacer.txtDescription,'<br/>','|','ALL')>
<cfset myArrayList = ListToArray(myList,'|')>

Wybrałem postać potoku, ponieważ jest mało prawdopodobne, aby już istniała w twoim ciągu. Jeśli chciałbyś uwzględnić fakt, że twój tag BR może, ale nie musi używać składni XML, to możesz:

<cfset myList = ReReplaceNoCase(str,'<br/?>','|','ALL')>
<cfset myArrayList = ListToArray(myList,'|')>

2
2018-05-15 12:40



Downvote dla "mało prawdopodobne" - nie wiesz, co może zawierać opis! Są też Znaki ASCII przeznaczone do ograniczania które mogłyby zostać użyte zamiast tego, gdyby konieczne było zamiany separatora (nie jest). - Peter Boughton
Przepraszam, jeśli nie byłam jasna. Wskazałem postać, aby wskazać, że można ją zmienić. Próbowałem zrobić prosty przykład. Leigh wspomniała o preferencji dla odpowiedzi, która nie używała Javy. Próbowałem to zapewnić. - Steve Bryant