Да, ваш формат не подходит для данных, которые вы показываете. Лучше должно быть так read(99,'(6(E11.4,X))') myData(i,:)
.
Тем не менее, я не уверен, что вам действительно нужно использовать формат при чтении вообще.
Ниже приведен пример, близкий к тому, что вы пытаетесь сделать, и он работает ботом с форматом и без него.
program readdata
implicit none
real, allocatable :: myData(:,:)
real :: myLine
integer :: i, j, myRow, myColumn
character(len=30) :: myFileName
character(len=30) :: myFormat
myFileName='data.dat'
open(99, file=myFileName)
write(*,*)'open data file'
read(99, *) myRow
read(99, *) myColumn
allocate(myData(myRow,myColumn))
do i=1,myRow
read(99,*) myData(i,:)
!read(99,'(6(E11.4,X))') myData(i,:)
print*, myData(i,:)
enddo
close(99)
end program readdata
Чтобы проверить, я предположил, что у вас всегда есть строки и столбцы в файле, так как мои тестовые данные следуют.
2
6
2.9900E-35 2.8000E-35 2.6300E-35 2.4600E-35 2.3100E-35 2.1600E-35
2.9900E-35 2.8000E-35 2.6300E-35 2.4600E-35 2.3100E-35 2.1600E-35
Если вам действительно интересно прочитать ваши файлы в формате, и если количество столбцов не является постоянным, вам может понадобиться формат в зависимости от переменной, см. связанные обсуждения здесь .
Вы можете использовать jQuery.grep()
:
var found_names = $.grep(names, function(v) {
return v.name === "Joe" && v.age < 30;
});
Настолько быстрый вопрос. Что делать, если у вас есть два массива объектов, и вы хотите «выровнять» эти массивы объектов, чтобы вы могли убедиться, что объекты каждого массива находятся в порядке, как и у другого массива? Что делать, если вы не знаете, какие ключи и значения содержат какие-либо объекты внутри массивов ... Значительно меньше того, в каком порядке они существуют?
Поэтому вам нужно выражение «WildCard Expression» для вашего [].filter
, [].map
и т. д. Как вы получаете выражение дикой карты?
var jux = (function(){
'use strict';
function wildExp(obj){
var keysCrude = Object.keys(obj),
keysA = ('a["' + keysCrude.join('"], a["') + '"]').split(', '),
keysB = ('b["' + keysCrude.join('"], b["') + '"]').split(', '),
keys = [].concat(keysA, keysB)
.sort(function(a, b){ return a.substring(1, a.length) > b.substring(1, b.length); });
var exp = keys.join('').split(']b').join('] > b').split(']a').join('] || a');
return exp;
}
return {
sort: wildExp
};
})();
var sortKeys = {
k: 'v',
key: 'val',
n: 'p',
name: 'param'
};
var objArray = [
{
k: 'z',
key: 'g',
n: 'a',
name: 'b'
},
{
k: 'y',
key: 'h',
n: 'b',
name: 't'
},
{
k: 'x',
key: 'o',
n: 'a',
name: 'c'
}
];
var exp = jux.sort(sortKeys);
console.log('@juxSort Expression:', exp);
console.log('@juxSort:', objArray.sort(function(a, b){
return eval(exp);
}));
Вы также можете использовать эту функцию по итерации для каждого объекта, чтобы создать лучшее коллективное выражение для всех ключи в каждом из ваших объектов, а затем фильтровать ваш массив таким образом.
Это небольшой фрагмент из API Juxtapose, который у меня почти завершен, что делает это, равенство объектов с исключениями, объектами, и конденсация матрицы. Если это то, что вам нужно или хотите для вашего проекта, прокомментируйте, и я сделаю доступный lib доступным раньше, чем позже.
Надеюсь, это поможет! Счастливое кодирование:)
var nameList = [
{name:'x', age:20, email:'x@email.com'},
{name:'y', age:60, email:'y@email.com'},
{name:'Joe', age:22, email:'joe@email.com'},
{name:'Abc', age:40, email:'abc@email.com'}
];
var filteredValue = nameList.filter(function (item) {
return item.name == "Joe" && item.age < 30;
});
//To See Output Result as Array
alert(JSON.stringify(filteredValue));
Вы можете просто использовать javascript:)
Вы можете сделать это очень легко с помощью метода [].filter
:
var filterednames = names.filter(function(obj) {
return (obj.name === "Joe") && (obj.age < 30);
});
Вам нужно будет добавить прокладку для браузеров, которые не поддерживают метод [].filter
: this Страница MDN дает такой код.
var names = [{
name: "Joe",
age: 20,
email: "joe@hotmail.com"
},
{
name: "Mike",
age: 50,
email: "mike@hotmail.com"
},
{
name: "Joe",
age: 45,
email: "mike@hotmail.com"
}
];
const res = _.filter(names, (name) => {
return name.name == "Joe" && name.age < 30;
});
console.log(res);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.js"></script>
Вы можете использовать функцию jQuery.filter () для возврата элементов из подмножества согласующих элементов.
var names = [
{ name : "Joe", age:20, email: "joe@hotmail.com"},
{ name : "Mike", age:50, email: "mike@hotmail.com"},
{ name : "Joe", age:45, email: "mike@hotmail.com"}
];
var filteredNames = $(names).filter(function( idx ) {
return names[idx].name === "Joe" && names[idx].age < 30;
});
$(filteredNames).each(function(){
$('#output').append(this.name);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="output"/>