Created
March 11, 2017 05:41
-
-
Save Rusk85/7b9d782570e96a7c9e4389f3e0edbe7e to your computer and use it in GitHub Desktop.
Possible solution for stackoverflow question http://stackoverflow.com/questions/42585452/parsing-the-date-out-of-a-filename-and-append-it-to-the-beginning
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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