Question about taking data from a .txt file

I have a .txt that will have a group of that I need to pull out based off of a space being in between. For example, a certain chunk will have a title, followed by an unknown number of lines that start with a hyphen, that will then be followed by a space.
How can I pull out each block of hyphens into its own unique cell? I want it to start at the first hyphen of the group and end at the next space. I know I need to use a loop but I'm having trouble setting this up.
I've tried setting up a combination of for/while loops while using if statements but I'm having no luck.
Any sort of help will be appreciated.

4 comentarios

Azzi Abdelmalek
Azzi Abdelmalek el 19 de Jun. de 2015
Can you post an example, and ask clearly what you want.
Let's say I have this text file:
Room 1
- 6 chairs
- 5 tables
- 2 lamps
Room 2
- 3 tables
- 7 chairs
- 8 ottomans
- 6 lamps
Room 3
- 3 lamps
- 9 chairs
- 4 tables
- 2 rugs
I've already separated the "Room"s and put them into their own cells. I need the specifics of each room into another cell underneath them. Let's say Room 1 is in cell{1,1}, Room 2 is in cell{1,2} and Room 3 is in cell{1,3}. I need the particulars in Room 1 in cell{2,1}, Room 2 in cell{2,2} and Room 3 in cell{2,3}.
However, I don't know how many actual rooms there will be or how many pieces (of whatever type) in each room.
Is there a loop I can set up so that each block of hyphens will be in it's own cell pertaining to the correct room in a cell in the same column?
Thanks.
Azzi Abdelmalek
Azzi Abdelmalek el 19 de Jun. de 2015
This is not clear, Room 1 is in cell{1,1} or in cell{2,1}? can you just post the expected result for this example?
Choke
Choke el 19 de Jun. de 2015
Editada: Choke el 19 de Jun. de 2015
I don't have expected results because this is only the first part of a larger problem I'm having. (Edit: I know how to do everything in this particular problem after this step is solved. I just can't figure out how to put multiple line of a text file into a single cell)
The title 'Room 1' is in cell{1,1}. The actual contents in Room 1 (- 6 chairs - 5 tables - 2 lamps) needs to be in cell{2,1}. 'Room 2' will be in cell{1,2} while the '-' for Room 2 will be in cell {2,2} and so on.
Sorry, I can't be more specific, but like I said, this is the first of about five steps I need to do and I only have the final solution, on top of that, the examples I have to run are a lot more complicated so I'm trying to simplify it.
I really appreciate you taking your time.

Iniciar sesión para comentar.

 Respuesta aceptada

Azzi Abdelmalek
Azzi Abdelmalek el 19 de Jun. de 2015
fid = fopen('fic.txt');
line1 = fgetl(fid);
k=0;
while ischar(line1)
k=k+1;
res{k,1}=line1;
line1 = fgetl(fid);
end
fclose(fid);
idx1=find(~cellfun(@isempty,regexpi(res,'room')))
idx2=[idx1(2:end)-1; numel(res)]
for k=1:numel(idx1)
out{1,k}=res{idx1(k)}
out{2,k}=res(idx1(k)+1:idx2(k))
end

Más respuestas (1)

Stephen23
Stephen23 el 19 de Jun. de 2015
Editada: Stephen23 el 19 de Jun. de 2015
There is no need to use any slow loops for this, when regexp does it all in one go:
fmt = '(^Room \d+)\s*\n(^- \d+ [^\n]+(\n|$))+';
str = fileread('temp.txt');
C = regexpi(str,fmt,'lineanchors','tokens');
C = vertcat(C{:});
and the output looks like this:
>> C
C =
'Room 1' [1x35 char]
'Room 2' [1x49 char]
'Room 3' [1x43 char]
>> C{1,2}
ans =
- 6 chairs
- 5 tables
- 2 lamps
And of course you can do something similar with the names in the second column, if you wish to split them into separate cells. I used my FEX submission to help generate the regexp regular expression:
And this is the file that I used:

1 comentario

Choke
Choke el 19 de Jun. de 2015
Thanks, that got me what I needed, but I'm not comfortable using regexp yet. Haven't learned it. But thanks again.

Iniciar sesión para comentar.

Categorías

Más información sobre Loops and Conditional Statements en Centro de ayuda y File Exchange.

Etiquetas

Preguntada:

el 19 de Jun. de 2015

Comentada:

el 19 de Jun. de 2015

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by