Sain datatiedoston (noin 3 miljoonaa riviä), joka onkin liian suuri muokattavaksi excelillä tai wordilla. En voi saada sitä uudelleen. Koko johtuu siitä että siinä on paljon turhaa ja toistuvaa tekstiä. Haluaisin poistaa ylimääräiset tekstit ja rivit esim. etsi-korvaa toiminnolla tms. Millä keinolla voisi käsitellä suurta tiedostoa?
Suuren tekstitiedoston muokkaaminen
Yksinyrittävä
2283
0Äänestä
Muut lukivat myös
Odottaa vastausta
Näihin keskusteluihin ei ole vielä vastattu. Ole ensimmäinen.
Vastaukset 22
Vanhimmat
Mikä tiedostomuoto?
Esimerkiksi LibreOfficen Base (tietokanta) tai Calc (taulukkolaskenta) ovat ilmaisia sovelluksia, joissa ei ole keinotekoisia rajoitteita tiedoston, kenttien tai solujen koolle kuten Excelissä on.
http://fi.libreoffice.org/lataa/luotettavin-libreoffice/
Microsofthan haluaisi sinun siirtyvän Accessiin, jos Excel käy pieneksi. ;)
Jos kyseessä on "oikea" tietokanta, ehdottaisin tutustumista myös MySQL:n käyttöliittymiin:
https://en.wikipedia.org/wiki/MySQL#Graphical_user_interfaces
SQL lienee tuttua huttua?
Tekisköhän EditPad Litellä jotain? Ilmeisesti Lite-version raja on 4 gigaa, kun Pro-versiota kehutaan mainostetaan näin verrattuna Liteen:
"Edit huge files without breaking a sweat, including files larger than 4 GB, even if your PC only has a few GB of RAM. Also, the maximum length of a single line is not limited, which is a problem with many editors claiming to support "unlimited" file sizes. "
http://www.editpadlite.com/
"EditPad Lite is free for personal use only."
Kiitos nopeista vastauksista. Tiedosto on tosiaan pelkkää tekstiä, hirmuinen katalooki. Kokeilen noilla mitä tarjottiin, kerron miten onnistuu. Lähes loppuvuosi on aikaa.
Yksi vaihtoehto on pilkkoa tiedosto useammaksi pienemmäksi ja käsitellä sitten niitä pienempiä.
http://www.hjsplit.org/
Todella hyvä tuo EditPad Lite. Yksi kysymys vielä.
Haluaisin poistaa rivinvaihdon jokaisen merkkiin : päättyvän rivin lopusta.
En keksinyt keinoa poistaa rivinvaihtoa. Onko sitä tässä ohjelmassa. Worissa se on, mutta käsittely ei tosiaan ainakaan vielä onnistu. Ehkä sitten, kun EditPad lyhentää tiedostoa tarpeeksi.
Kokeile korvata
:\n
arvolla
:
Tai sitten vain teet macroilla exelissä. esimerkki alla. asetat siis muokattavan alueen.
Option Explicit
Option Compare Text
Sub DeleteWord()
Dim Cel As Range, Range As Range
Dim Word As String
Set Range = Range("B2:B20") '.
Word = "Theword"
Application.ScreenUpdating = False
For Each Cel In Range
If Cel Like "*" & Word & "*" Then
Cel = Replace(Cel, Word, "")
'To remove the double space that follows ..
Cel = Replace(Cel, " ", " ")
End If
Next Cel
Application.ScreenUpdating = True
End Sub
Luitko edes avausta?
"joka onkin liian suuri muokattavaksi excelillä tai wordilla."
Miten tuo makrosi poistaa rivinvaihtoja?
Vielä en noita makroja ole kokeillutkaan. Ihastuin nopeaan EditPad Liteen. En vaan saa sitä ymmärtämään rivinvaihtoja mitenkään. Ei \p, \n... Eikä ulkomaisiltakaan foorumeilta löydy vastausta. Käsin mahdoton tehtävä poistaa miljoona rivinvaihtoa...
Voisiko olla \r ? Heksaeditorillahan voi selvittää sen rivinvaihtokoodin, jos ei muuten onnistu.
"Systems based on ASCII or a compatible character set use either LF (Line feed, '\n', 0x0A, 10 in decimal) or CR (Carriage return, '\r', 0x0D, 13 in decimal, displayed as "^M" in some editors) individually, or CR followed by LF (CR LF, '\r\n', 0x0D0A)."
Unikoodi on tietysti vielä oma juttunsa.
http://www.fileformat.info/info/unicode/char/000a/index.htm
Regex päälle ja haku \r.
3 milj riviä jos kirjain korkeus väli yhteensä n.10mm, taitaa olla 300m pitkä luiska
Tuo pistuus johtunee epäonnistuneesta tietokantahausta tms. Tiedoston koko on yli 200 000 kt. \r ei myöskään toimi. Kun tekstiä maalaa, näkyy rivien lopussa merkki, joka muistuttaa numeroa 9, mutta taitaa olla vakio tuossa ohjelmassa.
Nyt sain vinkin kokeilla muuttaa vielä varmasti txt-tiedostoksi tallettamalla päätteen kanssa toisella nimellä...
SE TOIMI! Avasin tiedoston Notepadissa ja talletin uudelle nimelle. Sen jälkeen :\n korvattuna : toimi. Ja vieläpä todella nopeaa touhun Notepadiltä ja EditPadiltä. Isosti kiitoksia ja hyvää loppuvuotta kaikille vinkeillä rohkaisua antaneille. Hyvä ME! Microsoft, välttävää joulua sinnekin!
Hyvä että homma etenee. Minä olin jo alkamassa tekemään heksavirittelyjä, mutta annetaan ehkä olla..
Jossain muuten väitettiin, että myös WordPad kykenisi käsittelemään isoja tiedostoja.
Harmi etten kerinnyt valmista saamaan ajoissa.
Olisitko pystynyt ajaamaan python skriptin, joka nyt on tehty ja testattu Mintissä. Kokeilin oman sanakirjan ajossa, ja ajaksi jäi alle 1 sek, rivejä kuitenkin 1,5 miljoonaa.
Ohjelma poistaa tyhjät rivit, ja yhistää sellaiset rivit seuraavaan joiden lopussa on (:) merkki, jonka tietysti voit vaihtaa muuksikin. Itse asiassa tuolla on noista kaksikin versiota, toinen on komentokehotteesta ajettava ja toinen kehitysympäristön IDEstä.
Tuon komentokehotteesta ajettavan suorituskyky olisi mukava kuulla.
http://pastebin.com/ajue7wGm
Tiedoston ala reunassa käyttöohje. Tee tiedostosta varmuuskopio ensin, jos parametrit menee sekasin komentojonossa.
Komento:
time python trim-file.py input.txt output.txt
time -käynnistää ajan oton
python - skriptin tulkki
trim-file.py - skriptin joka annetaan tulkin käsittelyyn
input.txt - Se hiton iso tiedosto jota käsitellään
output.txt - Se tiedosto johon nuo muutokset tallennetaan
(time) ei ole pakollinen kuvio, voi jättää poiskin, mutta olis mukava kuulla kauanko kesti käsitellä noin isoa tiedostoa.
Linux Mint 18 Sarah
Xfce 64-bit
Python on kyllä pätevä juuri tämän kaltaiseen säätöön, mutta äkkiähän tuon C:lläkin vääntää.
Olen niin tyytyväinen vinkkeihin, että kokeilen tuota skriptiäkin heti kun ehdin. Nyt tuli jatkoksi vielä toinen ongelma. Tiedosto on nyt sen verran lyhentynyt, että menee exceliin. MUTTA sekä EditPadissa että Excelissä on vielä yksi ongelma jäljellä. Pitäisi poistaa merkkijono ***, mutta Excel luulee että haluan poistaa kaiken ja EditPad ei suostu tekemään mitään. Tuo merkkijono on käytännössä aina rivin alussa ja sitä seuraavat merkkijonot vaihtelevat.
PowerShellissä onnistuu vaikkapa seuraavalla tavalla:
(Get-Content tiedosto.txt) | ForEach-Object { $_ -replace "\*\*\*", "" } | Set-Content uusitiedosto.txt
Tuo tiedosto.txt sisältää siis ne tähdet ja siivottu tulos tallennetaan uusitiedosto.txt:hen.
Laitan tuohon python skriptiin rivin lisää, jolla ratkaiset **** ongelman, jos tarvitset, ilmoittele.
Linux Mint 18 Sarah
Xfce 64-bit
Excelissä voinee käyttää tähtien edessä tildeä ~.
"Tip: You can find asterisks, question marks, and tilde characters (~) in worksheet data by preceding them with a tilde character in the Find what box. For example, to find data that contains "?", you would type ~? as your search criteria."
Kaava tunnistaa ***-merkinnän. Jos kentän alussa on "***", poimi neljännestä merkistä alkaen. Jos ei ole niin kelpaa sellaisenaan. Yleinen ongelma jonka ratkaisin näin.