Skip to content

Instantly share code, notes, and snippets.

View CurtHagenlocher's full-sized avatar

Curt Hagenlocher CurtHagenlocher

  • Microsoft
  • Mercer Island, WA
View GitHub Profile
@CurtHagenlocher
CurtHagenlocher / Web.ContentsCustomRetry.m
Created April 30, 2015 13:08
Demonstrates the use of a custom retry duration with Web.Contents.
let
Value.WaitFor = (producer as function, interval as function, optional count as number) as any =>
let
list = List.Generate(
() => {0, null},
(state) => state{0} <> null and (count = null or state{0} < count),
(state) => if state{1} <> null
then {null, state{1}}
else {1 + state{0}, Function.InvokeAfter(() => producer(state{0}), interval(state{0}))},
(state) => state{1})
let
Source = Text.FromBinary(File.Contents("D:\testdata\tweet.json")),
Eol = Text.PositionOf(Source, "#(lf)"),
Skipped = Text.Range(Source, Eol + 1),
Tweets = Json.Document(Skipped)
in
Tweets
@CurtHagenlocher
CurtHagenlocher / SplitByColumnHeader.m
Created April 7, 2015 14:44
This sample uses a header consisting of dashes to identify where the column boundaries are and then splits the file by those boundaries.
let
Source = Table.FromColumns({Lines.FromBinary(Web.Contents("http://www.aer.ca/data/WELLS/SPUDTHU.TXT"),null,null,1252)}),
Header = List.First(List.Select(Source[Column1], each Text.StartsWith(_, "--"))),
Positions = Text.PositionOf(Header, " ", -1),
Length = Text.Length(Header),
Lengths = List.Generate(
() => 0,
(i) => i <= List.Count(Positions),
(i) => i + 1,
(i) =>
@CurtHagenlocher
CurtHagenlocher / gist:1917432
Created February 26, 2012 15:49
StringFormat.cs
public class StringFormat : IDynamicMetaObjectProvider
{
/// <summary>
/// Usage: StringFormat.Format(formatString, key1: value1, key2: value2)
/// or StringFormat.Format(formatProvider, formatString, key1: value1, key2: value2)
/// </summary>
public static readonly dynamic Format = new StringFormat();
private StringFormat()
{
@CurtHagenlocher
CurtHagenlocher / gist:1917426
Created February 26, 2012 15:41
UrlBuilder.cs
public class UrlBuilder : IDynamicMetaObjectProvider
{
/// <summary>
/// Usage: UrlBuilder.Build(url, key1: value1, key2: value2)
/// </summary>
/// <remarks>
/// values will be converted to strings via "ToString()". Any url-encoding must happen before
/// this method is called. Pass null as the value at runtime in order to omit the parameter
/// entirely. Use String.Empty for query parameters which should be present but have no value.
/// If url is a string, the result will be a string. If it is a System.Uri, the result will