Script

Filter
2007-05-20

Strängar i C#

C#
Några vanliga och användbara strängfunktioner i C#
// Starts, ends...
bool b = haystack.StartsWith("needle");
bool b = haystack.EndsWith("needle");

// IndexOf, one time...
int first = haystack.IndexOf("needle");
int last = haystack.LastIndexOf("needle");

// IndexOf, multiple times...
int position = haystack.IndexOf("needle");
while (position != -1) {
    Console.WriteLine(position);
    position = haystack.IndexOf("needle {0}", position + 1);
}

// Sustring...
string fullName = "Cynthia Susan Lee";
string lastName = fullName.Substring(14);

// More functions...
str.concat(str2);
str.replace(str2);
str.trim(str2);

// Class StringBuilder()...
StringBuilder strbuff = new StringBuilder();
strbuff.Append("We sold");
strbuff.Append(" doughnuts for $");
strbuff.Append(15.95);
strbuff.Insert(8, " twelve"); // 8 = startposition

StringBuilder strbuff =
new StringBuilder("We moved from Chicago to Atlanta.");
strbuff.Replace(14, 20, "New York"); // start, stop, strReplace
strbuff.Remove(14, 17); // start, stop

// Split...
string strToken = “One Two Three”;
char[] separate = {' ', '\n'};
string[] result = strToken.Split(separate);
foreach (string token in result) {
    Console.WriteLine("{0}", token);
}
2007-05-19

Mata in siffror (Input.cs)

C#
Med den här klassen valideras sifferinmatning
using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;

// Class "Input" handles conversion of a string input to a corresponding number.
// The number is then valid only if it is within the range of a given NumberType.
// Overloaded methods checks for max and min values.
// Because this class is not put into a namespace it is
// possible to include it in any project without changes.

public enum NumberType {
    PositiveWithZero,
    PositiveNoZero,
    NegativeWithZero,
    NegativeNoZero,
    PositiveAndNegativeWithZero, // all numbers
    PositiveAndNegativeNoZero
}

public class Input {

    // Changes a string to a double
    // The result is saved and sent to the caller in numOut
    // Returns true if everything is OK and false otherwise...
    public static bool GetDouble(string strIn, NumberType numType, out double numOut) {
        if (double.TryParse(strIn, out numOut)) {
            switch(numType) {
                case NumberType.PositiveWithZero:
                    return (numOut >= 0.0);
                case NumberType.PositiveNoZero:
                    return (numOut > 0.0);
                case NumberType.NegativeWithZero:
                    return (numOut >= 0.0);
                case NumberType.NegativeNoZero:
                    return (numOut < 0);
                case NumberType.PositiveAndNegativeWithZero:
                    return true;
                case NumberType.PositiveAndNegativeNoZero:
                    return (Math.Round(numOut,8) != 0.0);
            }
            Debug.Assert(false); // Execution should never come here
            return false;
        } else {
            return false;  // String is not a number
        }
    }
    
    public static bool GetDouble(string strIn, double minValue, double maxValue, out double numOut) {
        if (double.TryParse(strIn, out numOut)) { // All numbers allowed
            return ((numOut >= minValue) && (numOut <= maxValue));
        } else {
            return false;
        }
    }

    // Although in C# 2.0 there is int.TryParse, the above GetDouble is reused
    // to save some programming lines in connection with checking the range of value type.
    public static bool GetInteger(string strIn, NumberType numType, out int numOut) {
        double dblvalue = 0.0;
        bool bOK = GetDouble(strIn, numType, out dblvalue);
        numOut = (int)dblvalue;
        return bOK;
    }

    public static bool GetInteger(string strIn, int minValue, int maxValue, out int numOut) {
        if (int.TryParse(strIn, out numOut)) { // All numbers allowed
            return ((numOut >= minValue) && (numOut <= maxValue));
        } else {
            return false;
        }
    }
    
} // end class 
2007-05-12

Dela upp stora filer

Linux
Dela upp stora filer i mindre bitar med split, sätt ihop med cat
split -b 10m minstorafil

# delar upp minstorafil i bitar om 10 mb
# fil 1 får namnet xaa, fil 2 xab, osv
# -b anger bitarnas storlek
# bitarna blir kopior - originalfilen finns kvar

cat xaa xab > minnyastorafil

# sätter ihop delarna igen
2007-05-12

Autostarta program i Linux

Linux
Ett sätt att starta program automatiskt i Ubuntu (m fl)
System > Inställningar > Sessioner > Startprogram > Lägg till
2007-05-11

Redigera i VIM

Linux
Kortfattad lathund för textredigering i VIM
-- 2 lägen: --
Infogaläge (insert, append) = tryck på i eller a (R skriver över text)
Normalläge = tryck på -esc-
(I infogaläget skriver man som vanligt.
I normalläget kan man ge programmet en massa kommandon.)

-- Spara (i normalläge) --
:w (write)
:q! (kasta ändringar, tvinga quit)
:wq(spara ändringar, write and quit)

-- Radera --
Radera tecken (i normalläget) = x (som del)
Radera tecken (i normalläget) = X (som backspace)
Radera slutet av ett ord (delete word) = dw
Radera slutet av en rad  = d$
Radera från markören till märke a = d´a (som du sätter med "ma")
Radera hel rad = dd

-- Markera: --
visual mode = v (tecken), V (rad), Ctl-V (block)
flytta sedan markören och utför kommandot på det markerade direkt

-- Ångra --
Ångra tidigare kommandon (undo) = u (även :undo)
Ångra tidigare ändringar på en rad = U
Ångra ångringar (redo) = Ctl - R (även :redo)

-- Kopiera --
Kopiera utan att radera (yank) = y
Klistra in (paste) = p (p efter markören, P före)
"a-z (citat och en liten bokstav) = Kopiera till namngivet register (klippbord)
Ex:
v --markera texten-- "cy (kopierar till c)
"cp (klistrar in från c)

-- Sök --
Sök framåt = /-fras-
Sök bakåt = ?-fras-
Hitta nästa (next) = n (Shft - N motsatt riktn)
Hitta matchande parentes = %
Ersätt gammalt med nytt på en rad (det första ) = :s/gammalt/nytt
Ersätt alla gammalt med nytt på en rad (globalt) = :s/gammalt/nytt/g
Ersätt fraser mellan rad # och rad # = :#,#s/gammalt/nytt/g
Ersätta alla förekomster i filen = :%s/gammalt/nytt/g
Bekräfta varje gång (confirm) = :%s/gammalt/nytt/gc
Kör ett externt kommando = :!kommando
Spara fil (write) = :w -filnamn-
Spara raderna # till # i filen -filnamn- = :#,#w -filnamn-
Infoga fil (read) = :r -filnamn-

-- Hoppa --
Visa position = Ctl - G
Hoppa till början = 1G (rad nr1)
Flytta till slutet = Shft - G
mx = Definiera märke
´x = Hoppa till definierat märke
´´ (två apostrofer) = Hoppa till senaste positionen
´" (apostrof, citat) = När du öppnar en fil: hoppa till senaste positionen du var i ´. (apostrof, punkt) = Hoppa till senaste ändringen

-- Formattera om --
Markera i visual mode med v, sedan
gq

-- Flaggor --
:set ic (ignore case)
:set number och :set nonumber (visar/döljer radnummer)
:set invlist (visar osynliga tecken)
:set textwidth=72 (sätter bredden på raderna)
:set wrap, :set nowrap

(:set all för att visa alla flaggor)

-- .vimrc --
Ovanstående gäller även här...
set nocompatible (först i filen - för att inte vim ska tro att den är vi)
syntax on (Aktivera "syntax highlightning" överallt där det är möjligt.)
set autoindent (eller cindent eller smartindent)
set backspace=indent,eol,start (Tillåter att man använder backspace över de flesta saker, till exempel radslut, i insert mode.)
set formatoptions=tcq (Bestämmer hur Vim skall radbryta texten)
t = Radbryt automatiskt 
c = Radbryt kommentarer automatiskt. Sätt in tecknet som definierar kommentaren. 
o = Sätt in tecknet som definierar en kommentar när en ny rad skapas med o eller O 
q = Tillåt att kommentarer formateras med gq. 
l = Bryt inte rader automatiskt, gör detta bara när kommandot gq ges. 

:marks (visar alla märken)
:registers (visar alla klipp)

-- Flera fönster --
:split eller :split &lt;filnamn&gt;
Ctrl-ww hoppar genom alla öppna fönster
Ctrl-wj hoppar till fönstret nedanför
Ctrl-wk hoppar till fönmstret ovanför

-- Klistra in en annan fil --
:r <filnamn>
🙂