Skip to content

Instantly share code, notes, and snippets.

@Rusk85
Created March 11, 2017 05:41
Show Gist options
  • Save Rusk85/7b9d782570e96a7c9e4389f3e0edbe7e to your computer and use it in GitHub Desktop.
Save Rusk85/7b9d782570e96a7c9e4389f3e0edbe7e to your computer and use it in GitHub Desktop.
Actual String Length: 48
BEFORE: jjcPrPUgFCuhzxqxoKoBLcrOdWMnsSQRGeLQYDBpVtCfxRGD-04.07.2016 14:16.m4a
AFTER: 2016.07.04 14:16 jjcPrPUgFCuhzxqxoKoBLcrOdWMnsSQRGeLQYDBpVtCfxRGD.m4a
Actual String Length: 74
BEFORE: hSoLucHNMMDAvMzyLiYFsAlqmqjhMWjDlsDYJShnoFPtUqlQHhkypPtHGYydTzbQCZpciAOTbL-09.09.2004 19:25.m4a
AFTER: 2004.09.09 19:25 hSoLucHNMMDAvMzyLiYFsAlqmqjhMWjDlsDYJShnoFPtUqlQHhkypPtHGYydTzbQCZpciAOTbL.m4a
Actual String Length: 15
BEFORE: sAELLnvZWrLtdtP-16.11.2011 20:01.m4a
AFTER: 2011.11.16 20:01 sAELLnvZWrLtdtP.m4a
Actual String Length: 68
BEFORE: gsrwEzGXPBBYAZweRMTcmjdzYrBiKaBVWKtmuoJVtZCkSeTPiVZihfvXpSynYxmOZGcP-17.03.2004 12:03.m4a
AFTER: 2004.03.17 12:03 gsrwEzGXPBBYAZweRMTcmjdzYrBiKaBVWKtmuoJVtZCkSeTPiVZihfvXpSynYxmOZGcP.m4a
Actual String Length: 71
BEFORE: mGSHUyLZPatOQowWCQvXVNNkmbdjYlwfiwjqwlEPmyxNGRmBknhMHbOzTIvSuCbDEoFuffz-09.03.2001 16:26.m4a
AFTER: 2001.03.09 16:26 mGSHUyLZPatOQowWCQvXVNNkmbdjYlwfiwjqwlEPmyxNGRmBknhMHbOzTIvSuCbDEoFuffz.m4a
Actual String Length: 99
BEFORE: DuPCZKdKyhIJxNQLuJwTjsmSveNQAaqqjUfadSDqzTQxMvILBAmaavPliWgUWnkxRrzDIPHBgftqCOgawcpZNpqOeTSgMJumIsG-11.11.1974 01:42.m4a
AFTER: 1974.11.11 01:42 DuPCZKdKyhIJxNQLuJwTjsmSveNQAaqqjUfadSDqzTQxMvILBAmaavPliWgUWnkxRrzDIPHBgftqCOgawcpZNpqOeTSgMJumIsG.m4a
Actual String Length: 72
BEFORE: UVcyJtQgyUYlJBbLyPWBPwLhHjhLerZDgdvuLFkyqFkzoxIftjGnOrUxjURzmebhVueGfGaS-16.06.1980 04:13.m4a
AFTER: 1980.06.16 04:13 UVcyJtQgyUYlJBbLyPWBPwLhHjhLerZDgdvuLFkyqFkzoxIftjGnOrUxjURzmebhVueGfGaS.m4a
Actual String Length: 88
BEFORE: jBcrUKLOOiXlROLmlDdETscZNjNIqhKlXbHYjNhwjGpxhuieTlZFiIZQydEKXcxHxMoPgNcywHuncERsaIPehedp-02.09.1994 02:09.m4a
AFTER: 1994.09.02 02:09 jBcrUKLOOiXlROLmlDdETscZNjNIqhKlXbHYjNhwjGpxhuieTlZFiIZQydEKXcxHxMoPgNcywHuncERsaIPehedp.m4a
Actual String Length: 52
BEFORE: giIavgtXfjAjAnLNTllKontzsIYMqoWpainfuEvlGLJVGVCbqcFV-25.09.1980 20:46.m4a
AFTER: 1980.09.25 20:46 giIavgtXfjAjAnLNTllKontzsIYMqoWpainfuEvlGLJVGVCbqcFV.m4a
Actual String Length: 67
BEFORE: NiHHRmlisaGtpPadCDxSwfXvnIbtoXuqmXIdZeSIvNkbKJqfWIIqrpkHkltjlSUvGqg-09.02.2017 01:28.m4a
AFTER: 2017.02.09 01:28 NiHHRmlisaGtpPadCDxSwfXvnIbtoXuqmXIdZeSIvNkbKJqfWIIqrpkHkltjlSUvGqg.m4a
Actual String Length: 80
BEFORE: xJVWLErVwFpdYWMaSNKIwDSOutCYYZEjFCSAMoAORpvogCrjFgeqNcrTQgBrbsXxbfywemoEmWRhiEHS-02.04.1989 19:53.m4a
AFTER: 1989.04.02 19:53 xJVWLErVwFpdYWMaSNKIwDSOutCYYZEjFCSAMoAORpvogCrjFgeqNcrTQgBrbsXxbfywemoEmWRhiEHS.m4a
Actual String Length: 44
BEFORE: CkYJFNjMyrXmadVfsRAeRkkLmzIpJZgCNKVlfCJQdjsP-06.04.2001 17:07.m4a
AFTER: 2001.04.06 17:07 CkYJFNjMyrXmadVfsRAeRkkLmzIpJZgCNKVlfCJQdjsP.m4a
Actual String Length: 7
BEFORE: ZujDsZn-12.02.1974 20:04.m4a
AFTER: 1974.02.12 20:04 ZujDsZn.m4a
Actual String Length: 27
BEFORE: vzqiKZQiJaISvAUSUivYghDhDlR-03.07.2006 03:06.m4a
AFTER: 2006.07.03 03:06 vzqiKZQiJaISvAUSUivYghDhDlR.m4a
Actual String Length: 60
BEFORE: OSqGvokRLiUAENDnkLHBfnVjEyhMFXRDYRLbBnMhOpwvmdHeBpBxxryAXhbX-04.06.1981 17:19.m4a
AFTER: 1981.06.04 17:19 OSqGvokRLiUAENDnkLHBfnVjEyhMFXRDYRLbBnMhOpwvmdHeBpBxxryAXhbX.m4a
Actual String Length: 55
BEFORE: MbBMXYANQRAWBRckpwufHskeulPapcJeVCUdZDEyXEIJwkAfdnWqWmU-10.09.1992 07:42.m4a
AFTER: 1992.09.10 07:42 MbBMXYANQRAWBRckpwufHskeulPapcJeVCUdZDEyXEIJwkAfdnWqWmU.m4a
Actual String Length: 52
BEFORE: xNiwbZXZlMSVicKBHjLKWcfshJHAnBlSqyhVAajBiebkyadRJoPi-26.06.1997 09:37.m4a
AFTER: 1997.06.26 09:37 xNiwbZXZlMSVicKBHjLKWcfshJHAnBlSqyhVAajBiebkyadRJoPi.m4a
Actual String Length: 32
BEFORE: srwMJAZFJVOaHZkCSaVUgFQQYMdTRVMo-19.08.2011 04:42.m4a
AFTER: 2011.08.19 04:42 srwMJAZFJVOaHZkCSaVUgFQQYMdTRVMo.m4a
Actual String Length: 39
BEFORE: KyvtWUnhiOWKtMVhNAFNXxgNOiApViaQzIlvLlT-24.08.1999 20:05.m4a
AFTER: 1999.08.24 20:05 KyvtWUnhiOWKtMVhNAFNXxgNOiApViaQzIlvLlT.m4a
Actual String Length: 27
BEFORE: tBPEeIfEunsHFOuXmaNfkKBzwBH-18.01.1988 12:01.m4a
AFTER: 1988.01.18 12:01 tBPEeIfEunsHFOuXmaNfkKBzwBH.m4a
Actual String Length: 58
BEFORE: PYAresLVoXdeFfBMsUqPbIapiCbvBbKqOcYvxUWvuowDwsWBiqaIKdBgXl-05.06.1986 06:23.m4a
AFTER: 1986.06.05 06:23 PYAresLVoXdeFfBMsUqPbIapiCbvBbKqOcYvxUWvuowDwsWBiqaIKdBgXl.m4a
Actual String Length: 30
BEFORE: MpCggpxXVuMmxTQGAnkbbFKBSxlKue-03.10.1979 06:40.m4a
AFTER: 1979.10.03 06:40 MpCggpxXVuMmxTQGAnkbbFKBSxlKue.m4a
Actual String Length: 41
BEFORE: ubbCKPJOUzstVQbkklhEboIeNDQpSbijNmfliyrPb-20.11.2017 19:19.m4a
AFTER: 2017.11.20 19:19 ubbCKPJOUzstVQbkklhEboIeNDQpSbijNmfliyrPb.m4a
Actual String Length: 32
BEFORE: dKZdCxsftXPhZuWSriFIKPbMUrDprKlv-02.06.1980 03:02.m4a
AFTER: 1980.06.02 03:02 dKZdCxsftXPhZuWSriFIKPbMUrDprKlv.m4a
Actual String Length: 67
BEFORE: pUaSlJjQHPeGKLRDoJnjlUdOJMtdyiOQnBqNKXPdKAVzmeAKmYWyPUwvRljzpfsyaos-05.05.1973 19:19.m4a
AFTER: 1973.05.05 19:19 pUaSlJjQHPeGKLRDoJnjlUdOJMtdyiOQnBqNKXPdKAVzmeAKmYWyPUwvRljzpfsyaos.m4a
Actual String Length: 24
BEFORE: zKZDBElJRAmqaseVWzOqNEiw-13.11.2005 07:17.m4a
AFTER: 2005.11.13 07:17 zKZDBElJRAmqaseVWzOqNEiw.m4a
Actual String Length: 15
BEFORE: GFFvMvnJEnFoRmK-08.01.1974 11:07.m4a
AFTER: 1974.01.08 11:07 GFFvMvnJEnFoRmK.m4a
Actual String Length: 57
BEFORE: CwUBCfETTuIuGKuXszIPjciprkNJKnPcLdcjAlTifLukGwGaTdMayEsAo-16.03.1987 07:52.m4a
AFTER: 1987.03.16 07:52 CwUBCfETTuIuGKuXszIPjciprkNJKnPcLdcjAlTifLukGwGaTdMayEsAo.m4a
Actual String Length: 65
BEFORE: FFJCIlwhFAJyIXJUDNQHAOEgLBVVbCQkCNFaNerHGFvYVTSqVqNEeAfRbDRgqAgdJ-13.11.2015 07:39.m4a
AFTER: 2015.11.13 07:39 FFJCIlwhFAJyIXJUDNQHAOEgLBVVbCQkCNFaNerHGFvYVTSqVqNEeAfRbDRgqAgdJ.m4a
Actual String Length: 53
BEFORE: viaVtFlRJEaLOlgcHOZkmlrgzsowXXYmjojVAjyvrZwLAuoysTmDJ-25.03.1980 19:52.m4a
AFTER: 1980.03.25 19:52 viaVtFlRJEaLOlgcHOZkmlrgzsowXXYmjojVAjyvrZwLAuoysTmDJ.m4a
Actual String Length: 7
BEFORE: rOTMFNB-14.01.1980 12:27.m4a
AFTER: 1980.01.14 12:27 rOTMFNB.m4a
Actual String Length: 60
BEFORE: SnOFFedQedKuDmbYeFMxeCgKgNTOvhsOnfdZwlosXAKPbkjpyefVLSyqhdzS-06.04.1990 21:42.m4a
AFTER: 1990.04.06 21:42 SnOFFedQedKuDmbYeFMxeCgKgNTOvhsOnfdZwlosXAKPbkjpyefVLSyqhdzS.m4a
Actual String Length: 18
BEFORE: yibCTruzESqIVEEprb-12.01.1990 14:45.m4a
AFTER: 1990.01.12 14:45 yibCTruzESqIVEEprb.m4a
Actual String Length: 39
BEFORE: MwhJfNegdKgxBmErtUxQvDnGYdVpSLRvikgUmQy-03.03.1997 19:51.m4a
AFTER: 1997.03.03 19:51 MwhJfNegdKgxBmErtUxQvDnGYdVpSLRvikgUmQy.m4a
Actual String Length: 86
BEFORE: PPRLbMpbWijAKbSPnsSKorgKfDvtFTMuigngxgJffhnXLLfxmwozaNDyIhGyqWwdwOsDNMrhIMFheiZtxYhiEm-10.05.1997 18:26.m4a
AFTER: 1997.05.10 18:26 PPRLbMpbWijAKbSPnsSKorgKfDvtFTMuigngxgJffhnXLLfxmwozaNDyIhGyqWwdwOsDNMrhIMFheiZtxYhiEm.m4a
Actual String Length: 53
BEFORE: lPiKjAWtBJzfhRohwuAimbrPnzkvWaYpaHxXwwUHcaVpHdwvfngvW-05.03.1979 10:22.m4a
AFTER: 1979.03.05 10:22 lPiKjAWtBJzfhRohwuAimbrPnzkvWaYpaHxXwwUHcaVpHdwvfngvW.m4a
Actual String Length: 72
BEFORE: qAwAKkeAurLZzSfmfcikcOqJUDsSunzcakrCEuEwYWbOBhVedadvlmHCkNGhRlfgRIZpBDHL-12.08.1981 02:44.m4a
AFTER: 1981.08.12 02:44 qAwAKkeAurLZzSfmfcikcOqJUDsSunzcakrCEuEwYWbOBhVedadvlmHCkNGhRlfgRIZpBDHL.m4a
Actual String Length: 19
BEFORE: MHoPtjdROCPrQNxENQU-25.10.1978 14:32.m4a
AFTER: 1978.10.25 14:32 MHoPtjdROCPrQNxENQU.m4a
Actual String Length: 40
BEFORE: sXAaBOHGUzDwMWORlMMlRXagyoSGnDbLpaRfrNaa-19.03.2013 21:01.m4a
AFTER: 2013.03.19 21:01 sXAaBOHGUzDwMWORlMMlRXagyoSGnDbLpaRfrNaa.m4a
Actual String Length: 14
BEFORE: YicXTQoBvXtBnW-01.04.1985 10:49.m4
AFTER: 1985.04.01 10:49 YicXTQoBvXtBnW.m4a
Actual String Length: 74
BEFORE: fIzxLLBGdceikTylGhVaywiXmNdISCzkitTzCAheNVrUotccCgKqWhmIABlYISNADUZRaYIfaQ-07.07.1974 05:39.m4a
AFTER: 1974.07.07 05:39 fIzxLLBGdceikTylGhVaywiXmNdISCzkitTzCAheNVrUotccCgKqWhmIABlYISNADUZRaYIfaQ.m4a
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Text.RegularExpressions;
using System.Diagnostics;
namespace OneOffRegexReordering
{
class Program
{
private static Random Random = new Random();
private static object SyncLock = new object();
private static object SyncLockLoop = new object();
static void Main(string[] args)
{
Run(40);
}
private static void Run(int numberOfOutputLines)
{
for (int i = 0; i <= numberOfOutputLines; i++)
{
Reorder(GenerateVariableLengthString(), GenerateRandomDate());
}
}
private static string GenerateVariableLengthString()
{
lock (SyncLock)
{
string alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
int strMaxLength = 100;
int strMinLength = 5;
int maxIndex = alphabet.Length;
string result = null;
int actualLength = Random.Next(strMinLength, strMaxLength);
for (int i = 0; i <= actualLength; i++)
{
lock (SyncLockLoop)
{
result += alphabet[Random.Next(0, maxIndex)];
}
}
return result;
}
}
private static string GenerateRandomDate()
{
lock (SyncLock)
{
Func<int, int, int> r = Random.Next;
int day = r(1, 27);
int month = r(1, 12);
int year = r(1970, 2020);
int hour = r(0, 23);
int min = r(0, 59);
int sec = r(0, 59);
return new DateTime(year, month, day, hour, min, sec).ToString("dd.MM.yyyy HH:mm");
}
}
private static string FormatDateTime(string datetimeAsString)
{
try
{
return DateTime.Parse(datetimeAsString).ToString("yyyy.MM.dd HH:mm");
}
catch (Exception ex)
{
if (ex is FormatException)
{
throw new FormatException(
$"The value {datetimeAsString} of 'dateTimeAsString has an unknown format. Aborting execution.", ex);
}
throw ex;
}
}
private static void Reorder(string input, string dateStr)
{
string dateTimeOutputFormat = FormatDateTime(dateStr);
string untouchedInput = $"{input}-{dateStr}.m4a";
string actualInput = $"{input}-{dateTimeOutputFormat}.m4a";
// nnn-15.10.2015 18:51.m4a
// 2015.10.15 18:51 nnn.m4a
string pattern = @"^([a-zA-Z]+\-)(\d{4}\.\d{1,2}\.\d{1,2}\s\d{2}:\d{2})(\.)(m4a)";
var regex = new Regex(pattern);
var match = regex.Match(actualInput);
if (match.Success)
{
var groups = match.Groups;
var nnn = groups[1].Value.Replace("-",String.Empty);
var date = groups[2].Value;
var extDot = groups[3].Value;
var extension = groups[4].Value;
var result = $"{date.Trim()} {nnn}{extDot}{extension}";
Debug.WriteLine($"Actual String Length: {input.Length}");
Debug.WriteLine($"BEFORE: {untouchedInput}");
Debug.WriteLine($"AFTER: {result}{Environment.NewLine}");
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment