Miten voi poistaa tiedostosta yli 300 merkkiä pitkät rivit?
Ohjelman pitäisi toimia sekä unixissa että windowsissa.
On helppo jos yhdestä tiedostosta luetaan ja toiseen kirjoitetaan, mutta kun on vain yksi tiedosto. Ja tiedosto voi olla tosi iso, joten muistin varaaminen voi olla ongelmallista.
Ohjelman pitäisi toimia sekä unixissa että windowsissa.
On helppo jos yhdestä tiedostosta luetaan ja toiseen kirjoitetaan, mutta kun on vain yksi tiedosto. Ja tiedosto voi olla tosi iso, joten muistin varaaminen voi olla ongelmallista.
Vastaukset 7
Vanhimmat
Eipä taida rivien poistoon löytyä hyvää oikoteitä, mutta kun käytät standardi-C:tä, ohjelmasi toimii missä tahansa ympäristössä, johon löytyy C-kääntäjä. Tee näin:
Uudelleennimeä (.bak) alkuperäinen tiedostosi ja avaa se lukua varten. Luo uusi tiedosto alkuperäisellä nimellä ja avaa se kirjoitusta varten. Lue rivi alkuperäisestä tiedostosta ja kirjoita / jätä kirjoittamatta se uuteen tiedostoon. Toista rivien lukua tiedoston loppuun sakka ja sulje tiedostot.
Muistia on allokoitava vain yhden maksimirivin vaatiman tilan verran ja kiintolevyllä tms. on tietenkin oltava vapaata tilaa uudelle tiedostolle.
Alkuperäisen tiedoston suora muokkaaminen on tietenkin mahdollista, mutta huomattavasti hankalampaa mm. koska tiedosto on avattava samanaikaisesti sekä lukua että kirjoitusta varten.
Ei siinä muistia ole varattava kovinkaan paljon. Luetaan vain tavu kerrallaan ja lasketaan rivinvaihtojen välisten tavujen määrä. Jos määrä on liian iso, riville ei tehdä mitään, mutta jos se on tarpeeksi pieni, kirjoitetaan se siihen mainitsemaanne väliaikaistiedostoon.
Perlillä onnistuu helposti. Esim. Unixeissa (samalle riville):
perl -nle 'print if (length($_)
tämä on kullä C-ohjelmointipalsta :-o
Huomasin kyllä, mutta kysyjä antoi vinkin "Ohjelman pitäisi toimia sekä unixissa että windowsissa", niin työtä ei kannata välttämättä yrittää tehdä C:llä, kun on olemassa paljon parempiakin tapoja.
"Huomasin kyllä, mutta kysyjä antoi vinkin "Ohjelman pitäisi toimia sekä unixissa että windowsissa"."
väitätkö ihan tosissasi että tuo ei mene standardi kirjastoilla ?
Menee varmaan ihan helpostikin C:n standardikirjastoilla, mutta annoin vain vinkin perlistä, koska:
-tuollaisen ohjelman tarve on varmaan hyvin lyhytaikainen, joten siihen ei jaksa käyttää kauaa aikaa
-perl on kuin suunniteltu tekstin käsittelyyn
-perlillä tekee yhdellä rivillä koko homman samassa ajassa, mitä menee editorin avaamiseen ja ensimmäisen includen kirjoittamiseen
-tuskinpa on haittaa tietää muitakin tapoja tehdä sama asia