Modifica variabili importate

di il
2 risposte

Modifica variabili importate

Buongiorno a tutti,
volevo ringraziarvi a priori per il supporto che mi date, considerando che spesso trovo le risposte alle mie domande solo scorrendo i vari post nel forum.

Vi spiego dove ho bisogno di una mano:

Sto scrivendo un codice per la elaborazione di dati di pneumatici, tramite una serie di formule specifiche.
i dati che uso da rielaborare si trovano spesso in un file con estensione .TIR, e sono l'output di un noto programma di simulazione per veicoli (MSC Adams), questo file può tranquillamente essere aperto con excel per essere visionato.

Veniamo al dunque, riesco a importare tranquillamente il file in matlab come cell, il problema sorge quando cerco di creare delle struct con queste cell in quanto alcune variabili vengono salvate con carattere inziale " e non capisco il perchè dato che nel file TIR il carattere non è presente.

c'è il modo di scorrere tutto il cell array in cerca di un carattere e rimpiazzarlo?

vi ringrazio anticipatamente per la disponibilità e l'aiuto.

qui sotto copia del codice che uso per le operazioni sopra descritte:

%LOADTIR Load a user specified TIR file into a structure.
% 
% Syntax: [CurrentTyre] = loadTIR(FileNameLocation)
% where FileNameLocation is a string including full path and name

fileID = fopen(FileNameLocation,'r'); % Open file filename for reading ('r')

counter = 0;
LineNumber = 0;

%While not at end of file
while feof(fileID) == 0
    
    currentLine = fgetl(fileID);
    LineNumber = LineNumber + 1;
    
    if ~isempty(currentLine)
        %If current line is not a title, comment or description
        if (currentLine(1) ~= '[' && currentLine(1) ~= '$' && currentLine(1) ~= '!')
            %Append parameter counter
            counter = counter + 1;
            
            %Find location of = and $ in each row
            index1 = strfind(currentLine, '=') + 1;
            index2 = strfind(currentLine, '$') - 1;
            
            %Parameter Name
            value = currentLine(1:index1-2);
            MFParamName{counter,1} = strtrim(value);
            %Parameter Value
            if (isempty(index2) == 1)
                value = currentLine(index1:end);
                MFParamValue{counter,1} = strtrim(value);
            else
                value = currentLine(index1:index2);
                MFParamValue{counter,1} = strtrim(value);
            end
            %Parameter Description
            value = currentLine(index2+1:end);
            MFParamDescription{counter,1} = strtrim(value);
            
            
        end
    end
    
end

fclose(fileID);

for ii = 1:length(MFParamName)
    if cellfun(@length,MFParamName(ii)) > 1
        if any(isstrprop(MFParamValue{ii},'digit')) > 0
            originalTyre.(MFParamName{ii}) = str2double(MFParamValue{ii});
        else
            originalTyre.(MFParamName{ii}) = MFParamValue{ii};
        end
    end
end

qui di seguito link a cui scaricare un file .TIR per provare il codice
https://www.dropbox.com/s/qjklwligoand2n8/20-54_13_S412_1b5.TIR?dl=0

2 Risposte

  • Re: Modifica variabili importate

    Il nome di alcune variabili all'interno del file di input inizia con il carattere (").

    Quello che puoi fare, per esempio, è aggiungere un controllo nel punto nel quale estrai il nome della variabile dalla i-esima riga di testo letto.

    Con riferimento al tuo codice:
    
                index3=strfind(currentLine,'"')
                if(~isempty(index3))
                %Parameter Name
                   value = currentLine(1+index3(1):index1-2);
                else
                   value = currentLine(1:index1-2);
                end
    
  • Re: Modifica variabili importate

    Ciao ask,
    grazie mille della risposta, era banale e ce l'avevo sotto gli occhi, si vede che sono un principiante.

    avrei un altra domanda, mi sono capitat dei file, con nella prima parte, una serie di righe indicate come (comments) che però invece di iniziare con il ! come nel file che ti ho postato iniziano con ' (apice).

    essendo che Matlab usa l'apice come modo per riconoscere il testo, c'è un modo per identificare questo come carattere o mi conviene modificare il file di origine per ovviare al problema?

    grazie mille ancora
Devi accedere o registrarti per scrivere nel forum
2 risposte