Ваш файл является текстовым файлом, поэтому вы должны открыть его для чтения текста:
fid=fopen('c:\\input.txt','rt');
Затем для чтения я нахожу TEXTSCAN более мощным, чем FREAD / FSCANF (различия между ними
data = textscan(f, '%f')
возвращает массив ячеек. Вы можете получить содержимое с помощью
>> data{1}
ans =
2
4
8
16
32
64
128
256
512
1024
2048
4096
8192
TEXTREAD проще в использовании, чем TEXTSCAN , но согласно документации теперь устарела.
Этот способ полностью использует маршрутизацию MVC, поэтому вы можете в полной мере использовать преимущества инфраструктуры MVC. На основе ответа Стусмита.
Здесь у меня есть действие в ApplicationController
для динамического javascript для этого URL:
/application/js
Я включаю сюда статические файлы, потому что мне нужно загрузить только один главный файл javascript. Вы можете выбрать просто возврат динамического материала, если хотите:
/// <summary>
/// Renders out javascript
/// </summary>
/// <returns></returns>
[OutputCache(CacheProfile = "Script")]
[ActionName("js")]
public ContentResult RenderJavascript()
{
StringBuilder js = new StringBuilder();
// load all my static javascript files
js.AppendLine(IO.File.ReadAllText(Request.MapPath("~/Scripts/rr/cart.js")));
js.AppendLine(";");
// dynamic javascript for lookup tables
js.AppendLine(GetLookupTables());
js.AppendLine(";");
return new ContentResult()
{
Content = js.ToString(),
ContentType = "application/x-javascript"
};
}
Это вспомогательная функция, которая создает нашу таблицу поиска. Просто добавьте строку для каждого RouteUrl, который вы хотите использовать.
[NonAction]
private string GetLookupTables()
{
StringBuilder js = new StringBuilder();
// list of keys that correspond to route URLS
var urls = new[] {
new { key = "updateCart", url = Url.RouteUrl("cart-route", new { action = "updatecart" }) },
new { key = "removeItem", url = Url.RouteUrl("cart-route", new { action = "removeitem" }) }
};
// lookup table function
js.AppendLine("// URL Lookuptable");
js.AppendLine("$.url=function(url) {");
js.AppendLine("var lookupTable = " + new JavaScriptSerializer().Serialize(urls.ToDictionary(x=>x.key, x=>x.url)) + ";");
js.AppendLine("return lookupTable[url];");
js.AppendLine("}");
return js.ToString();
}
Это генерирует следующий динамический javascript, который по сути представляет собой просто таблицу поиска от произвольного ключа к URL-адресу, который мне нужен для моего метода действия:
// URL Lookuptable
$.url=function(url) {
var lookupTable = {"updateCart":"/rrmvc/store/cart/updatecart","removeItem":"/rrmvc/store/cart/removeitem"};
return lookupTable[url];
}
В корзине. js у меня может быть такая функция. Обратите внимание, что параметр url взят из справочной таблицы:
var RRStore = {};
RRStore.updateCart = function(sku, qty) {
$.ajax({
type: "POST",
url: $.url("updateCart"),
data: "sku=" + sku + "&qty=" + qty,
dataType: "json"
// beforeSend: function (){},
// success: function (){},
// error: function (){},
// complete: function (){},
});
return false;
};
Я могу вызвать его из любого места, просто:
RRStore.updateCart(1001, 5);
Это был единственный способ, который я мог придумать и который позволил бы мне использовать Маршрутизация чистым способом. Динамическое создание URL-адресов в javascript неприятно и сложно протестировать. Типы тестирования можно добавить где-нибудь здесь, чтобы упростить тестирование.
Обернуть вызов AJAX в функцию, которая принимает URL (и любые другие данные) в качестве параметра (ов) и возвращает ответ. Затем, по вашему мнению, вызовите функцию вместо прямого вызова AJAX.
function doAjax( url, data, elem, callback )
{
return $.ajax({
url: url,
data: { ajax: data },
cache: false,
success: function(response) { callback(response, elem, xhr); }
});
}
...
<input type='button' value='Go get it' onclick='doAjax( <%= Url.Action ...
Я не уверен, что это лучше, чем использовать вызов Ajax на странице, а не в файле JS, если только вы часто не используете один и тот же шаблон.
Вот еще один способ:
На главной странице включите область для встроенных сценариев:
<head>
...
<asp:ContentPlaceHolder runat="server" ID="_inlineScripts" />
...
</head>
Затем в Page_Load создайте служебную функцию:
protected void Page_Load( object sender, EventArgs e )
{
AddInlineScript( string.Format( "$.url=function(url){{return '{0}'+url;}}", GetBaseUri() ) );
...
}
private Uri GetBaseUri()
{
var requestUrl = Request.Url.AbsoluteUri;
var i = requestUrl.IndexOf( request.Path );
return new Uri( requestUrl.Substring( 0, i ) );
}
private void AddInlineScript( string content )
{
var script = new HtmlGenericControl( "script" );
script.Attributes.Add( "type", "text/javascript" );
script.InnerHtml = content;
_inlineScripts.Controls.Add( script );
}
Теперь вы можете использовать эту функцию в вашем AJAX:
$.ajax({
url: $.url('path/to/my-handler'),
...
});