comparison scripts/io/importdata.m @ 17325:8cfc28809a07

importdata.m: Add %!tests for colheaders and rowheaders. * scripts/io/importdata.m: Add %!tests for colheaders and rowheaders. Simplify code in %!tests.
author Rik <rik@octave.org>
date Fri, 23 Aug 2013 20:05:04 -0700
parents 7babcdb9bc13
children 44624eb20076
comparison
equal deleted inserted replaced
17324:c8809de193a3 17325:8cfc28809a07
309 309
310 310
311 ######################################## 311 ########################################
312 312
313 %!test 313 %!test
314 %! # Comma separated values 314 %! ## Comma separated values
315 %! A = [3.1 -7.2 0; 0.012 6.5 128]; 315 %! A = [3.1 -7.2 0; 0.012 6.5 128];
316 %! fn = tmpnam (); 316 %! fn = tmpnam ();
317 %! fid = fopen (fn, "w"); 317 %! fid = fopen (fn, "w");
318 %! fputs (fid, "3.1,-7.2,0\n0.012,6.5,128"); 318 %! fputs (fid, "3.1,-7.2,0\n0.012,6.5,128");
319 %! fclose (fid); 319 %! fclose (fid);
322 %! assert (a, A); 322 %! assert (a, A);
323 %! assert (d, ","); 323 %! assert (d, ",");
324 %! assert (h, 0); 324 %! assert (h, 0);
325 325
326 %!test 326 %!test
327 %! # Tab separated values 327 %! ## Tab separated values
328 %! A = [3.1 -7.2 0; 0.012 6.5 128]; 328 %! A = [3.1 -7.2 0; 0.012 6.5 128];
329 %! fn = tmpnam (); 329 %! fn = tmpnam ();
330 %! fid = fopen (fn, "w"); 330 %! fid = fopen (fn, "w");
331 %! fputs (fid, "3.1\t-7.2\t0\n0.012\t6.5\t128"); 331 %! fputs (fid, "3.1\t-7.2\t0\n0.012\t6.5\t128");
332 %! fclose (fid); 332 %! fclose (fid);
333 %! [a,d,h] = importdata (fn, "\\t"); 333 %! [a,d,h] = importdata (fn, "\t");
334 %! unlink (fn); 334 %! unlink (fn);
335 %! assert (a, A); 335 %! assert (a, A);
336 %! assert (d, "\t"); 336 %! assert (d, "\t");
337 %! assert (h, 0); 337 %! assert (h, 0);
338 338
339 %!test 339 %!test
340 %! # Space separated values, using multiple spaces to align in columns. 340 %! ## Space separated values, using multiple spaces to align in columns.
341 %! A = [3.1 -7.2 0; 0.012 6.5 128]; 341 %! A = [3.1 -7.2 0; 0.012 6.5 128];
342 %! fn = tmpnam (); 342 %! fn = tmpnam ();
343 %! fid = fopen (fn, "w"); 343 %! fid = fopen (fn, "w");
344 %! fprintf (fid, "%10.3f %10.3f %10.3f\n", A(1,:)); 344 %! fprintf (fid, "%10.3f %10.3f %10.3f\n", A');
345 %! fprintf (fid, "%10.3f %10.3f %10.3f\n", A(2,:));
346 %! fclose (fid); 345 %! fclose (fid);
347 %! [a,d,h] = importdata (fn, " "); 346 %! [a,d,h] = importdata (fn, " ");
348 %! unlink (fn); 347 %! unlink (fn);
349 %! assert (a, A); 348 %! assert (a, A);
350 %! assert (d, " "); 349 %! assert (d, " ");
351 %! assert (h, 0); 350 %! assert (h, 0);
352 351
353 %!test 352 %!test
354 %! # Header 353 %! ## Header text
355 %! A.data = [3.1 -7.2 0; 0.012 6.5 128]; 354 %! A.data = [3.1 -7.2 0; 0.012 6.5 128];
356 %! A.textdata = {"This is a header row."; ... 355 %! A.textdata = {"This is a header row."; ...
357 %! "this row does not contain any data, but the next one does."}; 356 %! "this row does not contain any data, but the next one does."};
358 %! fn = tmpnam (); 357 %! fn = tmpnam ();
359 %! fid = fopen (fn, "w"); 358 %! fid = fopen (fn, "w");
360 %! fputs (fid, [A.textdata{1} "\n"]); 359 %! fprintf (fid, "%s\n", A.textdata{:});
361 %! fputs (fid, [A.textdata{2} "\n"]);
362 %! fputs (fid, "3.1\t-7.2\t0\n0.012\t6.5\t128"); 360 %! fputs (fid, "3.1\t-7.2\t0\n0.012\t6.5\t128");
363 %! fclose (fid); 361 %! fclose (fid);
364 %! [a,d,h] = importdata (fn, "\\t"); 362 %! [a,d,h] = importdata (fn, '\t');
365 %! unlink (fn); 363 %! unlink (fn);
366 %! assert (a, A); 364 %! assert (a, A);
367 %! assert (d, "\t"); 365 %! assert (d, "\t");
368 %! assert (h, 2); 366 %! assert (h, 2);
369 367
370 %!test 368 %!test
371 %! # Ignore empty rows containing only spaces 369 %! ## Column headers, only last row is returned in colheaders
370 %! A.data = [3.1 -7.2 0; 0.012 6.5 128];
371 %! A.textdata = {"Label1 Label2 Label3";
372 %! "col1 col2 col3"};
373 %! A.colheaders = {"col1", "col2", "col3"};
374 %! fn = tmpnam ();
375 %! fid = fopen (fn, "w");
376 %! fprintf (fid, "%s\n", A.textdata{:});
377 %! fputs (fid, "3.1\t-7.2\t0\n0.012\t6.5\t128");
378 %! fclose (fid);
379 %! [a,d,h] = importdata (fn, '\t');
380 %! unlink (fn);
381 %! assert (a, A);
382 %! assert (d, "\t");
383 %! assert (h, 2);
384
385 %!test
386 %! ## Row headers
387 %! A.data = [3.1 -7.2 0; 0.012 6.5 128];
388 %! ## FIXME: Does Matlab even create field "textdata" if it is null?
389 %! A.textdata = {""};
390 %! A.rowheaders = {"row1", "row2"};
391 %! fn = tmpnam ();
392 %! fid = fopen (fn, "w");
393 %! fputs (fid, "row1\t3.1\t-7.2\t0\nrow2\t0.012\t6.5\t128");
394 %! fclose (fid);
395 %! [a,d,h] = importdata (fn, '\t');
396 %! unlink (fn);
397 %! assert (a, A);
398 %! assert (d, "\t");
399 %! assert (h, 2);
400
401 %!test
402 %! ## Row/Column headers and Header Text
403 %! A.data = [3.1 -7.2 0; 0.012 6.5 128];
404 %! A.textdata = {"This is introductory header text"
405 %! " col1 col2 col3"
406 %! "row1"
407 %! "row2"};
408 %! fn = tmpnam ();
409 %! fid = fopen (fn, "w");
410 %! fprintf (fid, "%s\n", A.textdata{1:2});
411 %! fputs (fid, "row1\t3.1\t-7.2\t0\nrow2\t0.012\t6.5\t128");
412 %! fclose (fid);
413 %! [a,d,h] = importdata (fn, '\t');
414 %! unlink (fn);
415 %! assert (a, A);
416 %! assert (d, "\t");
417 %! assert (h, 2);
418
419 %!test
420 %! ## Ignore empty rows containing only spaces
372 %! A = [3.1 -7.2 0; 0.012 6.5 128]; 421 %! A = [3.1 -7.2 0; 0.012 6.5 128];
373 %! fn = tmpnam (); 422 %! fn = tmpnam ();
374 %! fid = fopen (fn, "w"); 423 %! fid = fopen (fn, "w");
375 %! fprintf (fid, "%10.3f %10.3f %10.3f\n", A(1,:)); 424 %! fprintf (fid, "%10.3f %10.3f %10.3f\n", A(1,:));
376 %! fputs (fid, " "); 425 %! fputs (fid, " ");
381 %! assert (a, A); 430 %! assert (a, A);
382 %! assert (d, " "); 431 %! assert (d, " ");
383 %! assert (h, 0); 432 %! assert (h, 0);
384 433
385 %!test 434 %!test
386 %! # Exponentials 435 %! ## Exponentials
387 %! A = [3.1 -7.2 0; 0.012 6.5 128]; 436 %! A = [3.1 -7.2 0; 0.012 6.5 128];
388 %! fn = tmpnam (); 437 %! fn = tmpnam ();
389 %! fid = fopen (fn, "w"); 438 %! fid = fopen (fn, "w");
390 %! fputs (fid, "+3.1e0\t-72E-1\t0\n12e-3\t6.5\t128"); 439 %! fputs (fid, "+3.1e0\t-72E-1\t0\n12e-3\t6.5\t128");
391 %! fclose (fid); 440 %! fclose (fid);
392 %! [a,d,h] = importdata (fn, "\\t"); 441 %! [a,d,h] = importdata (fn, '\t');
393 %! unlink (fn); 442 %! unlink (fn);
394 %! assert (a, A); 443 %! assert (a, A);
395 %! assert (d, "\t"); 444 %! assert (d, "\t");
396 %! assert (h, 0); 445 %! assert (h, 0);
397 446
398 %!test 447 %!test
399 %! # Complex numbers 448 %! ## Complex numbers
400 %! A = [3.1 -7.2 0-3.4i; 0.012 -6.5+7.2i 128]; 449 %! A = [3.1 -7.2 0-3.4i; 0.012 -6.5+7.2i 128];
401 %! fn = tmpnam (); 450 %! fn = tmpnam ();
402 %! fid = fopen (fn, "w"); 451 %! fid = fopen (fn, "w");
403 %! fputs (fid, "3.1\t-7.2\t0-3.4i\n0.012\t-6.5+7.2i\t128"); 452 %! fputs (fid, "3.1\t-7.2\t0-3.4i\n0.012\t-6.5+7.2i\t128");
404 %! fclose (fid); 453 %! fclose (fid);
405 %! [a,d,h] = importdata (fn, "\\t"); 454 %! [a,d,h] = importdata (fn, '\t');
406 %! unlink (fn); 455 %! unlink (fn);
407 %! assert (a, A); 456 %! assert (a, A);
408 %! assert (d, "\t"); 457 %! assert (d, "\t");
409 %! assert (h, 0); 458 %! assert (h, 0);
410 459
411 %!test 460 ## FIXME: Currently commented out (8/23/13) because I can't determine whether
412 %! # Missing values 461 ## Matlab processes exceptional values.
462 %!#test
463 %! ## Exceptional values (Inf, NaN, NA)
464 %! A = [3.1 Inf NA; -Inf NaN 128];
465 %! fn = tmpnam ();
466 %! fid = fopen (fn, "w");
467 %! fputs (fid, "3.1\tInf\tNA\n-Inf\tNaN\t128");
468 %! fclose (fid);
469 %! [a,d,h] = importdata (fn, '\t');
470 %! unlink (fn);
471 %! assert (a, A);
472 %! assert (d, "\t");
473 %! assert (h, 0);
474
475 %!test
476 %! ## Missing values
413 %! A = [3.1 NaN 0; 0.012 6.5 128]; 477 %! A = [3.1 NaN 0; 0.012 6.5 128];
414 %! fn = tmpnam (); 478 %! fn = tmpnam ();
415 %! fid = fopen (fn, "w"); 479 %! fid = fopen (fn, "w");
416 %! fputs (fid, "3.1\t\t0\n0.012\t6.5\t128"); 480 %! fputs (fid, "3.1\t\t0\n0.012\t6.5\t128");
417 %! fclose (fid); 481 %! fclose (fid);
418 %! [a,d,h] = importdata (fn, "\\t"); 482 %! [a,d,h] = importdata (fn, '\t');
419 %! unlink (fn); 483 %! unlink (fn);
420 %! assert (a, A); 484 %! assert (a, A);
421 %! assert (d, "\t"); 485 %! assert (d, "\t");
422 %! assert (h, 0); 486 %! assert (h, 0);
423 487
424 %!test 488 %!test
425 %! # CRLF for line breaks 489 %! ## CRLF for line breaks
426 %! A = [3.1 -7.2 0; 0.012 6.5 128]; 490 %! A = [3.1 -7.2 0; 0.012 6.5 128];
427 %! fn = tmpnam (); 491 %! fn = tmpnam ();
428 %! fid = fopen (fn, "w"); 492 %! fid = fopen (fn, "w");
429 %! fputs (fid, "3.1\t-7.2\t0\r\n0.012\t6.5\t128"); 493 %! fputs (fid, "3.1\t-7.2\t0\r\n0.012\t6.5\t128");
430 %! fclose (fid); 494 %! fclose (fid);
431 %! [a,d,h] = importdata (fn, "\\t"); 495 %! [a,d,h] = importdata (fn, '\t');
432 %! unlink (fn); 496 %! unlink (fn);
433 %! assert (a, A); 497 %! assert (a, A);
434 %! assert (d, "\t"); 498 %! assert (d, "\t");
435 %! assert (h, 0); 499 %! assert (h, 0);
436 500
437 %!test 501 %!test
438 %! # CR for line breaks 502 %! ## CR for line breaks
439 %! A = [3.1 -7.2 0; 0.012 6.5 128]; 503 %! A = [3.1 -7.2 0; 0.012 6.5 128];
440 %! fn = tmpnam (); 504 %! fn = tmpnam ();
441 %! fid = fopen (fn, "w"); 505 %! fid = fopen (fn, "w");
442 %! fputs (fid, "3.1\t-7.2\t0\r0.012\t6.5\t128"); 506 %! fputs (fid, "3.1\t-7.2\t0\r0.012\t6.5\t128");
443 %! fclose (fid); 507 %! fclose (fid);
444 %! [a,d,h] = importdata (fn, "\\t"); 508 %! [a,d,h] = importdata (fn, '\t');
445 %! unlink (fn); 509 %! unlink (fn);
446 %! assert (a, A); 510 %! assert (a, A);
447 %! assert (d, "\t"); 511 %! assert (d, "\t");
448 %! assert (h, 0); 512 %! assert (h, 0);
449 513