Filling cell array in specific date domains
    4 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    HaDu
 el 29 de Jul. de 2017
  
    
    
    
    
    Comentada: per isakson
      
      
 el 9 de Ag. de 2017
            Hi, I am really new in Matlab and coding so I hope somebody can help me. I have a cell array where the first column is the start time and the 2nd is the endtime (dd.MM.yyyy_HH:mm:ss) and some other columns with further information called GivenData.

I have another cell array (eq. 170000x180), which is a SQL-Database-import. The 2nd column here is the time of documentation the others are further information.

(i made the array smaller for testing purpose)
at this point i generated empty columns at the end of the Database, which I want to fill in the right time domains
For Example: GivenData(2,3) should be written in Database(5:10,173) GivenData(2,4) should be written in Database(5:10,174) end so on
GivenData(3,3) should be written in Database(29:35,173) GivenData(3,4) should be written in Database(29:35,174)
for every row in GivenData the Database should get every information in the right time domain.
I usually wiold just do a bunch of for loops. But I have the feeling this is not that easy with matlab, besides it would take the whole night to fill the database.
I tried something like that
for k=2:size(GivenData,1)-1
    ta=datetime(GivenData(k,1), 'InputFormat','dd.MM.yyyy_HH:mm:ss');
    te=datetime(GivenData(k,2), 'InputFormat','dd.MM.yyyy_HH:mm:ss');
    for L=2:size(GivenDB,1)-1;
        tlower=datetime(GivenDB(L,2),'InputFormat','dd.MM.yy HH:mm:ss.SSSSSS');
        tupper=datetime(GivenDB(L+1,2),'InputFormat','dd.MM.yy HH:mm:ss.SSSSSS');
        if(isbetween(ta,tlower,tupper)==1)
            ta=L;
            break
        end
        for m=2:size(GivenDB,1)-1;
            tlower=datetime(GivenDB(L,2),'InputFormat','dd.MM.yy HH:mm:ss.SSSSSS');
            tupper=datetime(GivenDB(L+1,2),'InputFormat','dd.MM.yy HH:mm:ss.SSSSSS');
            %
            if(isbetween(te,tlower,tupper)==1)
                te=L;
                break
            else
                te=size(GivenDB,1);
                for n=3:size(GivenData,2)
                    p=rowstart+1:size(GivenDB,2);
                    GivenDB(ta:te,p)=GivenData(k,n);
                end
            end
        end
    end
end
Basically I tried to find out the in which row my start time begins and in which it ends to fill this. But it seems I cant have multiple variables. So basically I have nothing. I would really appreciate if someone had some suggestions.
I hope I could explain the problem well enough.
3 comentarios
  per isakson
      
      
 el 9 de Ag. de 2017
				"[...] bunch of for loops. But I have the feeling this is not that easy with matlab" How come you think for-loops are not as easy in Matlab as in any other language.
"it would take the whole night to fill the database." for-loops are not that slow in Matlab.
Respuesta aceptada
  Star Strider
      
      
 el 30 de Jul. de 2017
        ‘GivenData(2,3) should be written in Database(5:10,173) GivenData(2,4) should be written in Database(5:10,174) end so on’
You are copying one value in ‘GivenData’ to a column of values in ‘Database’. Use the repmat function to create it.
Example —
Database(5:10,173) = repmat(GivenData(2,3), numel(5:10), 1);
Database(5:10,174) = repmat(GivenData(2,4), numel(5:10), 1);
You will probably have to loop through the row number ranges, since I do not know how you are creating or augmenting ‘Database’.
If I understand correctly what you want to do, this should get you started.
2 comentarios
  Star Strider
      
      
 el 30 de Jul. de 2017
				My pleasure!
If you want to find specific times in one data set that correspond to times in another data set, consider using one of the set operation functions, such as ismember (link), ismembertol, or others.
Más respuestas (1)
  HaDu
 el 9 de Ag. de 2017
        1 comentario
  per isakson
      
      
 el 9 de Ag. de 2017
				Your chances to get a useful answer increases if you upload files with sample data. Screen-clips are less useful.
Ver también
Categorías
				Más información sobre Loops and Conditional Statements en Help Center y File Exchange.
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


