I första steget så ville jag läsa in det som står mellan de två första cittattecknen(").
Jag försöker så här
Regex exp = new Regex("?????",RegexOptions.IgnoreCase);//<---här vet jag inte
MatchCollection MatchList = exp.Matches(filnamnet);
Match FirstMatch = MatchList[0];
Group GroupCurrent;
for (int i = 1; i < FirstMatch.Groups.Count; i++)
{
GroupCurrent = FirstMatch.Groups[i];
if (GroupCurrent.Success)
{
comboBox1.Items.Add(GroupCurrent.Value);
}
}
Problemet är att jag inte vet hur jag skall skriva min regex för att enbart ha
med det första blocket( det finns alltid tre block). Hur jag sen skall fortsätta
det är jag osäker på, men jag tror det ger sig.
För övrigt så tror jag att jag är på rätt väg, eller...
I första läget ville jag ha ut det första blocket i varje rad.
Det verkar dessvere som om min kod är galen jag får följande error: Det angivna argumentet hamnade utanför intervallet med giltiga värden.
Parameternamn: i
Oavsett vilket av era förslag som jag försöker med.
Nu har jag ändrat en del och jag har fått första raden, men hur fortsätta så
jag får med alla?
Regex exp = new Regex("\".*?\"", RegexOptions.IgnoreCase);
MatchCollection MatchList = exp.Matches(allRead);
Match FirstMatch = MatchList[0];
Group GroupCurrent;
for (int i = 0; i < FirstMatch.Groups.Count; i++)
{
GroupCurrent = FirstMatch.Groups[i];
if (GroupCurrent.Success)
{
comboBox1.Items.Add(GroupCurrent.Value);
}
}
Regex exp = new Regex("\".*?\"", RegexOptions.IgnoreCase);
MatchCollection MatchList = exp.Matches(allRead);
foreach (Match match in MatchList){
Group GroupCurrent;
for (int i = 0; i < match.Groups.Count; i++)
{
GroupCurrent = match.Groups[i];
if (GroupCurrent.Success)
{
comboBox1.Items.Add(GroupCurrent.Value);
}
}
}
Men eftersom du bara är ute efter en specifik grupp så borde det räcka med typ
Regex exp = new Regex("\".*?\"", RegexOptions.IgnoreCase);
MatchCollection MatchList = exp.Matches(allRead);
foreach (Match match in MatchList){
if (match.Groups[1].Success){
comboBox1.Items.Add(match.Groups[1].Value);
}
}
Hej Brimba.
Jag har testat dina bägge förslag, och de lägger till i comboboxen, men de lägger till allt.
Jag blev tvungen att ändra lite för att få någon text alls
Regex exp = new Regex("\".*?\"", RegexOptions.IgnoreCase);
MatchCollection MatchList = exp.Matches(allRead);
foreach (Match match in MatchList)
{
if (match.Groups[0].Success)
{
comboBox1.Items.Add(match.Groups[0].Value);
}
}
Nu får jag det snyggt och prydligt. Nästa bit kräver nog regex, då skall jag
kunna klicka i comboboxen och få upp den nästföljande text i en textbox.
Tips???
[REDIGERAT]
Jag har nu fått allting att fungera dock inte med regex utan gammal hederlig strängmanupilation.
Jag tänkte visa er, den ovan koden fungerar bra, sedan
//när comboboxen ändras
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (comboBox1.SelectedIndex > -1)
{
int i = comboBox1.SelectedIndex + 1;
textBox1.Text = readLine(filnamn,i);
}
else
MessageBox.Show("Inget index");
}
//..så visar jag upp den här
private static string readLine(string filnamn,int lineNr)
{
string sText = "";
using (StreamReader sr = new StreamReader(filnamn))
for (int i = 0; i < lineNr; i++)
{
sText = sr.ReadLine();
if (sText == null) break;
}
string[] newText = sText.Split('"');
return newText[3];
}
Totalt så är det 33023 rader. Frågan är nu, i textfilen så är ju allt omgivna av citterationstecken, skall jag göra det i comboboxen och i textboxen.
Sen det viktigaste hur skall jag spara, när jag har plockat fram ett radnummer och ändrat det?
Väldigt tacksam för alla tips.
138 ms totalt · 3 externa anrop · v20260731065814-full.4bcf49fe