Filter löschen
Filter löschen

I have a .txt file with over 100,000 rows, want to extract rows that have two specific numbers (latitude and longitude) and save it in Ms Excel.

11 Ansichten (letzte 30 Tage)
I have a very large .txt file with over a 100,000 rows.
I want to extract rows (from the .txt file) that have a specific latitude and longitude and save the extracted rows in Excel.
I currenlty have this code but when I run it I get an error : unexpected MATLAB expression (in the first line of code)
function PET('text_file', num1, num2);
% Open the text file in read mode
fid = fopen(data_2018.txt, 'r');
% Create a new Excel file
excel_file = [data_2018.txt '.xlsx'];
xlswrite(excel_file, []);
% Iterate through the lines in the text file
while ~feof(fid)
% Read the current line
line = fgetl(fid);
% Split the line into a cell array
line_array = strsplit(line, ' ');
% Check if the line contains the two specified numbers
if ismember(27.249, line_array) && ismember(-82.380, line_array)
% Copy the line to the Excel file
xlswrite(excel_file, line);
end
end
% Close the text file
fclose(fid);
end
  2 Kommentare
Dyuman Joshi
Dyuman Joshi am 20 Jul. 2023
Bearbeitet: Dyuman Joshi am 20 Jul. 2023
In the definition of a function, the input arguements to the function are supposed to be variables (placeholders) and not values (char or otherwise).
% vvvvvvvvvvv
function PET('text_file', num1, num2);
Apart from this your code has many errors (for the lack of better word) -
1 - It's not clear to me why you have defined input arguements, when your code doesn't use them.
2 - You are supposed to use string or char vector as input to fopen
3 - I don't understand what this line is supposed to do. Possible concatenation to make a string, but then the implementation is questionable.
excel_file = [data_2018.txt '.xlsx'];
4 - If the variable line_array is a cell array, how are you going to compare a numeric value to it?
% Split the line into a cell array
line_array = strsplit(line, ' ');
% Check if the line contains the two specified numbers
if ismember(27.249, line_array) && ismember(-82.380, line_array)
Also, Use of xlswrite is not recommended, you should instead use writematrix (or writetable)

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Pratyush
Pratyush am 25 Jul. 2023
Bearbeitet: Pratyush am 25 Jul. 2023
Hi Leslie,
I understand that you have a text file with multiple lines in which some lines contains a particular pair of number(latitude, longitude) written in between. You want to extract those lines in a row of some Excel sheet. This could be done using the following lines in MATLAB.
% form an array of lines from your text file
fileContent = fileread('your_file.txt');
lines = splitlines(fileContent);
latitude = 42;
longitude = 73;
matchingLines = {};
% iterate through lines and add the desired line to matching line
for i = 1:numel(lines)
line = lines{i};
% ensure the order of latitude and longitude
% because (lat,lon) isn't same as (lon, lat)
pattern = sprintf('%d.*%d', latitude, longitude);
if ~isempty(regexp(line, pattern, 'once'))
matchingLines{end+1, 1} = line;
end
end
% write matchingLines to excel sheet
xlswrite('extracted_data.xlsx', matchingLines, 'Sheet1', 'A1');

Weitere Antworten (0)

Community Treasure Hunt

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

Start Hunting!

Translated by