Eli olisi ongelma rivinvaihtojen kanssa. Tarkoitus olisi tehdä skripti, joka lukee tiedoston sisällön muuttujaan, ja sen jälkeen korvaa tietyt merkkijonot. Mutta tiedostossa rivinvaihdot on kaikki \r:iä ja tämä ilmeisesti saa aikaan pienen ongelman. Eli pystyn korvaamaan ainoastaa yhden merkin toisella, mutta pitempiä merkkijonoja ei voi korvata.
Onko kenelläkään antaa vihjeitä siihen, miten \r:t voisi korvata \n:llä? Tai jotain muuta vihjettä? Yritin str_replacella korvata \r:t \n:llä mutta se ei onnistunut.
Onko kenelläkään antaa vihjeitä siihen, miten \r:t voisi korvata \n:llä? Tai jotain muuta vihjettä? Yritin str_replacella korvata \r:t \n:llä mutta se ei onnistunut.
Vastaukset 8
Vanhimmat
*Yritin str_replacella korvata \r:t \n:llä mutta se ei onnistunut.*
Miten yritit?
Katso esimerkki 1 toinen koodi http://fi.php.net/manual/fi/function.str-replace.php siinä monta arvoa korvataan tyhjällä.
Olethan tietoinen että "\n" on eri asia kuin '\n'
"\n" tarkoittaa rivinvaihtoa.
'\n' tarkoittaa \n merkki jonoa.
Jos tiedostossa näkyy \n niin '\n' on oikea valinta.
Tutustu http://fi.php.net/manual/fi/function.nl2br.php joka on vartavasten tehty rivinvaihdon korvaamiseen tagilla.
Olikos se niin, että Windows rivinvaihto \n
Unix rivinvaihto \r
Mac rivinvaihto \r\n
tai jotain sinnepäin, kolme niitä joka tapaukses on.
"Miten yritit?"
Ihan vain $uusi=str_replace("\r", "\n", $teksti);
En kovinkaan paljoa tee -merkeillä. Tärkeää olisi, että tiedoston rivit olisivat muuttujassa omissa alkioissaan, jotta voin muokata tietyn rivinumeronkin perusteella tekstiä. Nyt kun tiedostoissa rivinvaihtoon on käytetty \r, tarkoittaa se sitä että koko tiedoston sisältö tulee kohtaan $muuttuja[1].
Onpa vaikea selittää välillä :)
Yritin myös explodella kikkailla, mutta ei sekään tuntunut auttavan.
Kyllä se tuolla explodellakin pitäisi onnistua, mutta se ei ole parhain ratkaisu tähän, mikäli olen ymmärtänyt oikein mitä haluat.
*Ihan vain $uusi=str_replace("\r", "\n", $teksti);*
Kyllä tuon pitäisi toimia. Tai itse asiassa toimi kun kokeilin.
$teksti = file_get_contents('tiedosto.txt');
$uusi=str_replace("\r", "\n", $teksti);
file_put_contents ('tiedosto.txt', "$uusi");
Tuon jälkeen tiedostossa on korvattu kaik \r merkit, joten tuota scriptiä tarttee käyttää vain kun tiedostoja lisätään, tosin muunnos kannattaa tehdä jo tietojen lisäys vaiheessa.
Kysymys, näätkö sinä tiedostossa \r vai vaan rivinvaihdon?
Jos rivinvaihdon, niin se voi olla mikä tahansa noista kolmesta.
* Nyt kun tiedostoissa rivinvaihtoon on käytetty \r, tarkoittaa se sitä että koko tiedoston sisältö tulee kohtaan $muuttuja[1]*
Hmmmm, eikös se pitäisi silloin tulla $muuttuja[0], koska nollasta alkaa. Ettei vaan olis joku pieni kömmähdys
Joo, ei explode olisi mitenkään hyvä ratkaisu, mutta piti kokeilla että saanko millään rivinvaihtoja.
Tässä on nyt jotain vähän kummallista. Vaihdoin tiedostosta käsin rivinvaihdot niin, että niiden varmasti pitäisi toimia, muttei siltikään tapahdu mitään.
"Kysymys, näätkö sinä tiedostossa \r vai vaan rivinvaihdon?"
Tiedosto näkyy aivan kuten pitääkin varmasti kaikilla muilla tekstieditoreilla paitsi notepadilla. Muistaakseni notepad on juuri sellainen, joka ei tunnista \r:ää rivinvaihdoksi. Siis minä en tee notepadilla yhtään mitään, mutta siitä vain huomaa eron. Kun pitäisi tulla rivinvaihto, näkyy notepadissa vain joku neliö. Missään ei siis näy \r, mutta jos korvaan str_replacella kaikki \r:t vaikka *:ksi niin huomaa, että \r on se jota tiedostossa käytetään. On siis erittäin kummallista, että voin vaihtaa \r:n miksi tahansa merkiksi, mutta jos muutan sen \n:ksi niin sitten ei toimi. Sekavaa touhua.
Ja se $muuttuja[1] oli vain kiireessä tehty sekoilu, nolla sen tietysti olla pitää.
'/n' on ollut rivinvaihtomerkki ja "/n" on taas merkkijono, jossa viimeinen merkki on rivinvaihto. Esimerkiksi "terve/n"
"//n" tarkoittaa merkkijonoa /n
Kannattaa kokeilla korvaamiseen regular expressionia
$uusi_teksti= preg_replace("/\r/","",$teksti);
*'/n' on ollut rivinvaihtomerkki ja "/n" on taas merkkijono*
"\n" tuon tulostaa PHP rivinvaihto merkkinä
'\n' tulostaapi tasantarkkaan tuon \n
" " merkkien sisällä \ $ jne... ovat erikois merkkejä millä on omat tarkoituksensa.
' ' merkkien välillä tulostetaan kaikki niinkuin kiroitetaankin, mitään erikois merkkejä ei ole.
Tuossa on jotain asiasta http://www.cs.tut.fi/~jkorpela/rv/2.3.html
$uusi = str_replace(array("\r\n","\r","\n"),"\n
",$teksti);
Tuossa on yks mikä toimii noil kaikil.
Muutes semmonen kysymys vielä, ymmärtääkös käyttämäsi editori jne... tuon \n merkin päälle?
"Muutes semmonen kysymys vielä, ymmärtääkös käyttämäsi editori jne... tuon \n merkin päälle?"
Kyllä.
Tärkeintä olisi nyt saada jokainen tiedoston rivi omaan alkioonsa. Keinot vaan alkaa olla vähissä. Tällä hetkellä on mahdollista ainoastaan korvata yksi merkki toisella: str_replace("a", "b", $teksti) toimii, mutta str_replace("aa", "bb", $teksti)ei toimi. Pakko on myöskin korvata yksi merkki yhdellä merkillä, joten pelkkä \r-merkkien poistaminen saa tiedoston sekaisin.
PHP näymmä tulkkaa kaiken " " sisällä (purkaa myös muuttujat) ja taas ' ' sisällä tulostaa niin kuin sinne kirjoitetaan. Olin väärässä cram!