2012-08-22 17 views
5

Ho una struttura composta da celle. Voglio rimuovere tutti gli spazi bianchi all'inizio di ogni cella e alla fine, e voglio preservare tutti gli spazi bianchi tra il testo nelle celle. Quindi, se hoCome rimuovere gli spazi bianchi all'inizio e alla fine in matlab?

s = ' bbb b bbbb ' 

voglio ottenere

s = 'bbb b bbbb' 

voglio applicare questo metodo per un numero imprecisato di cellule in questa struttura (per esempio 2x3), magari utilizzando un ciclo. Qualcuno ha un'idea di come si fa? Ho fallito con regexp.

+0

ora ho una risposta semplice ma utile: strtrim (s)! Come posso applicarlo per ogni cella? – berndh

risposta

5

È possibile utilizzare strtrim() in combinazione con structfun() e cell-indexing:

your_struct = structfun(@(x) strtrim(x{1}), your_struct); 

Questo funziona solo se il tuo str UCT ha un layout simile

your_struct.a = {' some string '}; 
your_struct.b = {' some other string '}; 
... 

Se ha una struttura diversa, diciamo,

your_struct.a = { {' some string '} 
        {' some other string '}}; 

your_struct.b = { {' again, some string '} 
        {' again, some other string '}}; 

... 

Si potrebbe provare

your_struct = structfun(@(x) ... 
    cellfun(@strtrim, x, 'uni', false), ... 
    your_struct, 'uni', false); 
+0

Ho una cella diciamo 10x2. ogni cella contiene una stringa con spazi bianchi all'inizio, al centro e alla fine, desidera rimuovere tutto separatamente da questi all'inizio. quindi è come ** my_cell {1,1} = 'name1' ** ** my_cell {1,2} = 'string1' ** ** my_cell {2,1} = 'new name2' ** ecc. Cosa sarebbe essere la soluzione più semplice che farebbe questo? il tuo non sono riuscito ad applicare sfortunatamente .. – berndh

+0

@ user1578163 Cosa ottieni quando applichi la mia soluzione? Dà un errore? Potresti modificare la tua domanda per includere una versione minima della tua struttura + cell? –

+0

sicuro, grazie: il mio esempio di lavoro è ** M = {'title1' 'my name1'; 'title2' 'my name2'} ** cosa ottengo quando applico la tua soluzione: gli input su STRUCTFUN devono essere strutture scalari. – berndh

0

Se la matrice è chiamata, fare:

newmatrix = cellfun(@strtrim, a, 'UniformOutput', false) 
+0

e come posso applicare questo per ogni cella in modo efficiente? Perché scrivere questa funzione alla fine non rimuove. – berndh

+0

cosa intendi per ogni cella? – tomelse

+0

hai una matrice? – tomelse

0

Se A è la struttura che contiene le cellule, allora si potrebbe fare:

New_A=structfun(@strtrim,A,'UniformOutput',false) 
0

strtrim non sempre puntuale prendersi cura della fine della stringa per me, quindi io uso deblank

quindi se strtrim non ha fatto tutto ciò che volevi, puoi usare quello in congiunzione con deblank per ottenere quello che vuoi.