csv: faster, only use make when field contains quotes or newlines.
							parent
							
								
									3bd6610a9d
								
							
						
					
					
						commit
						e607cfb6ce
					
				|  | @ -24,19 +24,6 @@ DEFER: quoted-field | ||||||
| MEMO: (quoted-field) ( delimiter -- delimiter' ) | MEMO: (quoted-field) ( delimiter -- delimiter' ) | ||||||
|     "\"\n" swap suffix ; inline |     "\"\n" swap suffix ; inline | ||||||
| 
 | 
 | ||||||
| : not-quoted-field ( -- endchar ) |  | ||||||
|     delimiter> (quoted-field) read-until |  | ||||||
|     dup CHAR: " = |  | ||||||
|     [ 2drop quoted-field ] |  | ||||||
|     [ |  | ||||||
|         swap dup { |  | ||||||
|             [ ?first blank? ] |  | ||||||
|             [ ?last blank? ] |  | ||||||
|         } 1|| |  | ||||||
|         [ [ blank? ] trim ] when % |  | ||||||
|     ] |  | ||||||
|     if ; |  | ||||||
| 
 |  | ||||||
| : maybe-escaped-quote ( -- endchar ) | : maybe-escaped-quote ( -- endchar ) | ||||||
|     read1 dup { |     read1 dup { | ||||||
|         { CHAR: "    [ , quoted-field ] } |         { CHAR: "    [ , quoted-field ] } | ||||||
|  | @ -50,7 +37,18 @@ MEMO: (quoted-field) ( delimiter -- delimiter' ) | ||||||
|     drop % maybe-escaped-quote ; |     drop % maybe-escaped-quote ; | ||||||
| 
 | 
 | ||||||
| : field ( -- sep string ) | : field ( -- sep string ) | ||||||
|     [ not-quoted-field ] "" make  ; |     delimiter> (quoted-field) read-until | ||||||
|  |     dup CHAR: " = [ | ||||||
|  |         2drop [ quoted-field ] "" make | ||||||
|  |     ] [ | ||||||
|  |         swap [ "" ] [ | ||||||
|  |             dup { | ||||||
|  |                 [ ?first blank? ] | ||||||
|  |                 [ ?last blank? ] | ||||||
|  |             } 1|| | ||||||
|  |             [ [ blank? ] trim ] when | ||||||
|  |         ] if-empty | ||||||
|  |     ] if ; | ||||||
| 
 | 
 | ||||||
| : (row) ( -- sep ) | : (row) ( -- sep ) | ||||||
|     f delimiter> '[ dup _ = ] |     f delimiter> '[ dup _ = ] | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue