From: <cde...@us...> - 2012-03-07 08:04:26
|
Revision: 9758 http://octave.svn.sourceforge.net/octave/?rev=9758&view=rev Author: cdemills Date: 2012-03-07 08:04:20 +0000 (Wed, 07 Mar 2012) Log Message: ----------- Deduce column names when there are only separated by spaces Modified Paths: -------------- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_matassign.m Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_matassign.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_matassign.m 2012-03-06 16:08:10 UTC (rev 9757) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_matassign.m 2012-03-07 08:04:20 UTC (rev 9758) @@ -165,8 +165,12 @@ && ~all (df._over{2}(indc))) warning ("Trying to overwrite colum names"); endif - - ctype = RHS(1, :); RHS = RHS(2:end, :); + + if (sum (~cellfun ('isempty', RHS(1, indc))) == ncol) + ctype = RHS(1, :); + endif + + RHS = RHS(2:end, :); if (~indr_was_set) nrow = nrow - 1; indr = 1:nrow; endif @@ -244,7 +248,7 @@ df = df_pad (df, 1, max (indr)-df._cnt(1), rname_width); endif endif - + if (iscell(RHS)) %# we must pad on a column-by-column basis %# verify that each cell contains a non-empty vector, and that sizes %# are compatible @@ -268,6 +272,28 @@ keyboard endif + %# try to detect and remove bottom garbage + eff_len = zeros(nrow, 1); + for indi = (indr) + eff_len(indi, 1) = sum (~cellfun ('isempty', RHS(indi, :))); + endfor + indi = nrow; + while (indi > 0) + if (1 == eff_len(indi)) + nrow = nrow - 1; + indr(end) = []; + RHS(end, :) = []; + indi = indi - 1; + if (~indr_was_set && isempty (df._name{1, 1})) + df._cnt(1) = nrow; + df._ridx(end) = []; + endif + else + break; + endif + endwhile + clear eff_len; + %# the real assignement if (1 == size (RHS, 1)) %# each cell contains one vector fillfunc = @(x) RHS{x}; @@ -275,8 +301,8 @@ else %# use cell2mat to pad on a column-by-column basis fillfunc = @(x) cell2mat (RHS(:, x)); endif - - indj = 1; + + indj = 1; for indi = (1:ncol) if (indc(indi) > df._cnt(2)) %# perform dynamic resizing one-by-one, to get type right @@ -492,7 +518,18 @@ try df._name{2}(indc, 1) = genvarname (cname); catch - disp('line 472 '); keyboard + %# there was a problem with genvarname. + dummy = sum (~cellfun ('isempty', cname)); + if (1 == dummy) + dummy = strsplit(cname{1}, ' ', true); + if (length (dummy) == ncol) + df._name{2}(indc, 1) = dummy; + else + disp('line 528 '); keyboard + endif + else + disp('line 531 '); keyboard + endif end_try_catch df._over{2}(1, indc) = false; endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |