lire un gros fichier text par ligne
cr88251-Sep-2011/16:54:14+2:00
hello,

auriez vous une méthode pour lire un gros fichier par ligne ?

le but étant de sélectionner des lignes du gros fichier A et de les écrire dans un fichier B & cela sans encombrer la mémoire.....

merci d'avance
DocKimbel1-Sep-2011/18:06:16+2:00
Il y a ce script de Carl pour copier de gros fichiers sans les charger entièrement en mémoire: http://www.rebol.com/article/0281.html

Il ne copie pas ligne par ligne, mais par blocs de 100'000 octets.
cr88252-Sep-2011/10:24:58+2:00
merci beaucoup

que pensez vous de cela

do_something: func[

	data

	nbr

][

	probe rejoin ["ligne " nbr " data =>" data]

]



read_f_l: func[

	port

	/local

	nbr_line

	read_size

	data

	data_line

][

	data_line: ""

	read_size: 10

	nbr_line: 0

	forskip port read_size [

		data: copy/part port read_size

		either found? find data newline [

			nbr_line: nbr_line + 1

			ind: index? find data newline

			append data_line  copy/part data ind

			do_something to-string data_line  nbr_line

			data_line: none

			data_line: copy/part skip data ind tail data

		][

			append data_line data

		]

	]	

]



port: open/seek %myfile
read_f_l port

close port
cr88257-Sep-2011/11:17:26+2:00
correction

do_something: func[

	data

	nbr

][

	probe rejoin ["ligne " nbr " data =>" data]

]







read_f_l: func[

	port[port!]

	/local

	nbr_line

	read_size

	data

	data_line

][

	data_line: ""

	read_size: 1024

	nbr_line: 0

	i: 0

	forskip port read_size [

		i: i + 1

		data: copy/part port read_size

		either found? find data newline [

			ind: index? find/last data newline

			append data_line copy/part data ind

			foreach l (parse data_line to-string newline)[

					nbr_line: nbr_line + 1

					do_something to-string l  nbr_line

			]

			data_line: none

			data_line: copy/part skip data ind tail data

		][

			append data_line data

		]

		if i > 2 [

			;exit

		]

	]	

]







port: open/seek myfile

read_f_l port

close port



Login required to Post.


Powered by RebelBB and REBOL 2.7.8.4.2