मेरा कोड मौजूदा .csv फ़ाइल में संशोधन करता है। यह मौजूदा .csv फ़ाइल को लोड करता है, नई जानकारी लिखता है, फिर इसे फिर से सहेजता है:

    file = directory/test.csv 

    %Load data from old table
    alpha1 = readtable(file)
    alpha2 = alpha1.Variables;
    alpha = array2table(alpha2);
    
    %Get new data
    beta = array2table(newdata);
    beta.Properties.VariableNames = {'alpha21' 'alpha22' 'alpha23' 'alpha24' };
    
    %Merge old and new data then save
    merge = [alpha;beta];
    writetable(merge,file,'WriteVariableNames',0);

तालिका का पहला स्तंभ फ़ाइल संख्या है:

2×4 table

    alpha21     alpha22       alpha23       alpha24       
    _______    __________    __________    __________   
     1        2.2204e-14    2.2204e-14    2.2204e-14   
     2        2.2204e-14    2.2204e-14    2.2204e-14   

beta =

 2×4 table

    alpha21     alpha22       alpha23       alpha24       
    _______    __________    __________    __________   
     4        2.2204e-14    2.2204e-14    2.2204e-14   
     5        2.2204e-14    2.2204e-14    2.2204e-14

दो तालिकाओं को विलय करते समय, मैं तालिका के भीतर पंक्ति स्थिति निर्धारित करने के लिए पहले कॉलम की संख्या चाहता हूं:

5×4 table

    alpha21     alpha22       alpha23       alpha24       
    _______    __________    __________    __________   
     1        2.2204e-14    2.2204e-14    2.2204e-14   
     2        2.2204e-14    2.2204e-14    2.2204e-14
    NaN or zero
     4        2.2204e-14    2.2204e-14    2.2204e-14   
     5        2.2204e-14    2.2204e-14    2.2204e-14

इसके अलावा, यदि पंक्ति पहले से ही आबाद है, तो मैं चाहता हूं कि इसे ओवरविट किया जाए।

धन्यवाद

0
Mosawi 19 मार्च 2021, 17:44
क्या होता है यदि एक ही पंक्ति अनुक्रमणिका के साथ कई इनपुट टेबल हैं? मैं यह भी मानता हूं कि आउटपुट एक 5x4 टेबल है (जैसा दिखाया गया है) एक 2x5 टेबल (लेबल के रूप में) नहीं है?
 – 
Wolfie
19 मार्च 2021, 18:19
आदर्श रूप से उन्हें अधिलेखित कर दिया जाएगा। मैंने 2x5 को 5x4 में संशोधित किया, धन्यवाद
 – 
Mosawi
19 मार्च 2021, 18:25
"अधिलेखित" पर्याप्त विशिष्ट नहीं है - वरीयता का क्रम क्या है? यहां आपकी विशिष्ट समस्या क्या है? क्रिस की टिप्पणी इस ओर इशारा करती है कि यह बहुत व्यापक है... क्या आपको अनुक्रमण तालिकाओं की बेहतर समझ की आवश्यकता है? यह बेहतर होगा कि आप अपने प्रश्न को वास्तविक मुद्दे में बदल दें, फाइलों के बारे में सामान से छुटकारा पाएं (यह अप्रासंगिक है) और एक minimal बनाएं। प्रतिलिपि प्रस्तुत करने योग्य उदाहरण दो बहुत ही सरल तालिकाओं के साथ (उन्हें बनाने और परीक्षण करने के लिए हमें कोड दें) जो शायद केवल 2x2 हैं। आप सरणियों से शुरू कर रहे हैं, क्यों न उनके साथ चिपके रहें और अंत में एक टेबल में कनवर्ट करें? यह सरणी अनुक्रमण के साथ सरल है ...
 – 
Wolfie
19 मार्च 2021, 21:31
आपके सुझावों के लिए धन्यवाद, मैं उन्हें आगे बढ़ते हुए लागू करूंगा। यह कोड एक ऐप (उपयुक्त) का हिस्सा है, जो 41 कॉलम वाली टेबल तैयार करता है। जैसा कि आप देख सकते हैं, मैंने इसे यथासंभव सरल बनाने की कोशिश की। विक्की मेरे सवाल का जवाब देने में कामयाब रहा।
 – 
Mosawi
19 मार्च 2021, 21:43

1 उत्तर

सबसे बढ़िया उत्तर

आप उपयोग कर सकते हैं:

% Simulated data
Nalpha=20;
Nbeta=25;
alpha=table( (1:Nalpha).', randn(Nalpha,1), randn(Nalpha,1), randn(Nalpha,1), ...
  'VariableNames', {'alpha21', 'alpha22', 'alpha23', 'alpha24'} );
beta=table( (1:Nbeta).', randn(Nbeta,1), randn(Nbeta,1), randn(Nbeta,1), ...
  'VariableNames', {'alpha21', 'alpha22', 'alpha23', 'alpha24'} );
alpha( randperm(Nalpha,round(Nalpha/4)), : )=[]; %discard some rows
beta( randperm(Nbeta,round(Nbeta/4)), : )=[]; %discard some rows

% Merge tables
N=max(max(alpha.alpha21),max(beta.alpha21));
varnames=alpha.Properties.VariableNames;
gamma=[ (1:N).' nan([N numel(varnames)-1]) ];
gamma=array2table( gamma, 'VariableNames', varnames );
gamma(alpha.alpha21,:)=alpha;
gamma(beta.alpha21,:)=beta; %have any values in beta take precedence over those in alpha
1
Vicky 19 मार्च 2021, 18:36