Blog Archives

c# .net split strings with math divrem using lambda linq

Recently I came across a nice alternative to loops using linq for evenly splitting a string using Math.DivRem.

The following example illustrates how this can be used to parse a sequence of numbers based on a time series which may give variable results in a custom messaging protocol.

(inspired by R. Prestol)

//not the complete classes but satisfies the below example
class message {
string series {get;set;}
}

  string[] series = message.series.Split(' '); //will NOT throw an exception if series string is empty
            int Rem = 0;
            int d = Math.DivRem(name.Length, 2, out Rem); //hardcoded two for simplicity in this example
 
//valueB will contain the same value as valueA if there is no second value in the sequence
            string valueA = string.Join(" ", sentence.Take(Math.Max(d, 1)).ToArray());
            string valueB = string.Join(" ", sentence.Skip(d).Take(d + Rem).ToArray());

int average = (Convert.ToInt32(valueA) + Convert.ToInt32(valueB)) / 2; //2 would also need to be dynamic here

Console.WriteLine(average.ToString());

//potential input
//100 101
//100

//output for average
//first input: 100
//second input: 100

A significant figure is lost (.5) on first input since valueA and valueB are converted to int. Conversion to decimal, double etc would of course maintain this detail depending on the rounding you are looking for.

Classic ASP VB Filter File Name Extensions From String EndsWith

Came across a classic ASP VB site recently in my adventures. There was a feature request to filter out some file extensions from existing code logic, and I discovered quickly most of my .Net methods were unavailable, so I came up with this little snippet and had a great blast from the past. 🙂

   function FilterExtensions(fn)
   FilterExtensions=true
   a_ext = Array(".db",".db") 'place additional extensions here 
   for each ext in a_ext
      i = InStrRev(fn,ext)
   if i>0 then
   FilterExtensions=false
   end if
   next
   end function

If FilterExtensions returns true then there were no matches (extension of filename successfully passed all filters).

Concatenate string in Objective-C

Unfortunately, this is not as straight forward as it seems it should be. This really comes down to roughly two approaches in my opinion:

stringByAppendingString approach:

NSString *robot= @"Ronnie";
NSString *robotname = [robot stringByAppendingString:@" is the name of a robot."];

strigWithFormat approach:

NSString *robot= @"Ronnie";
NSString *robotname= @" is the name of the a robot.";
NSString *robotknowledge = @" knows eight languages.";
[NSString stringWithFormat:@"%@/%@/%@", robot, robotname, robot, robotknowledge];

References
StackOverflow, http://stackoverflow.com/questions/510269/how-do-i-concatenate-strings-in-objective-c
cocoadevcentral.com, “Learn Objective-C”, http://cocoadevcentral.com/d/learn_objectivec/

C++ concatenate strings with stream or sprint

There are many different ways to achieve this, but in my opinion the best method for something this commonly used is a solution that does not require additional external dependencies.. However, see reference at the bottom of this post for some other good solutions which are optimized for speed and brevity.

//declare our variables to concatenate
std::string name="somename";
int age = 100;
std::string result;

//if it's for basic console output
std::cout << "name:" << name << " age:" << age;

//using stringstream
std::stringstream ss;
ss << "name:" << name << " age:" << age;
result = ss.str();
std::cout << result;

//using ostringstream
std::ostringstream os;
os << "name:" << name << " age:" << age;
std::cout << os.str();

//using strintf
char numstr[21]; // enough to hold all numbers up to 64-bits
sprintf(numstr, "%d", age); //convert age to string
result = name + numstr; //concatenate

Stackoverflow (forum), http://stackoverflow.com/questions/191757/c-concatenate-string-and-int

Quick .Net Encryption Reference

The code below represents a very basic .NET encryption class which has been tested and should work in your application – simply plug and play. 🙂

Contains two static methods that can be called without needing to instantiate the class.

Keep in mind the initialization vector below (indicated by rgbIV) is generic, and you will need to come up with your own. Remember not to share this. Even if the password is compromised, the attacker would also need to know the initialization vector to crack your value.

Also note the code which has been commented out. This illustrates cases where passwords and/or IV can be statically set in the class and/or shared based on value passed in for password parameter.

Sharing IV and password or storing either statically is a security risk and could cause errors depending on byte differences of the values. If you statically store these values, you will still create secure cipher text, but it will be much easier to crack.

Enjoy. 😉

using System;
using System.IO;
using System.Text;
using System.Security.Cryptography;

namespace AIS.Common.Crypto
{

public static class Rijndael
{
    public static string Encrypt(string ClearText,string password)
    {

        byte[] clearTextBytes = Encoding.UTF8.GetBytes(ClearText);

        System.Security.Cryptography.SymmetricAlgorithm rijn = SymmetricAlgorithm.Create();

        MemoryStream ms = new MemoryStream();
        
        byte[] rgbIV = Encoding.ASCII.GetBytes("example");
        //byte[] key = Encoding.ASCII.GetBytes("longerexample");

        //byte[] rgbIV = Encoding.ASCII.GetBytes(password);
        byte[] key = Encoding.ASCII.GetBytes(password);

        CryptoStream cs = new CryptoStream(ms, rijn.CreateEncryptor(key, rgbIV),
   CryptoStreamMode.Write);

        cs.Write(clearTextBytes, 0, clearTextBytes.Length);

        cs.Close();

        return Convert.ToBase64String(ms.ToArray());
    }

    public static string Decrypt(string EncryptedText, string password)
    {
        byte[] encryptedTextBytes = Convert.FromBase64String(EncryptedText);

        MemoryStream ms = new MemoryStream();

        System.Security.Cryptography.SymmetricAlgorithm rijn = SymmetricAlgorithm.Create();


        byte[] rgbIV = Encoding.ASCII.GetBytes("example");
        //byte[] key = Encoding.ASCII.GetBytes("longerexample");

        //byte[] rgbIV = Encoding.ASCII.GetBytes(password);
        byte[] key = Encoding.ASCII.GetBytes(password);

        CryptoStream cs = new CryptoStream(ms, rijn.CreateDecryptor(key, rgbIV),
        CryptoStreamMode.Write);

        cs.Write(encryptedTextBytes, 0, encryptedTextBytes.Length);

        cs.Close();

        return Encoding.UTF8.GetString(ms.ToArray());

    }

}
}

References:
Wikipedia – Encryption, http://en.wikipedia.org/wiki/Encryption