Stringarray Wert zuweisen

fredlllll

Erfahrenes Mitglied
Also mein Problem ist folgendes:
Ich lese eine Textdatei in ein Stringarray ein. Dann will ich z.b. ab Zeile 33 bis i die Zeilen des Arrays mit dem eingelesenen Text in ein anderes Stringarray schreiben. Grund ist, dass ich danach aus der anderen Stringdatei auslesen will. (ich weiß ich könnte das auch direkt aus dem anderen Array machen aber Das ist mir zu umständlich, da die maximale Dateigröße aller Warscheinlichkeit niemals 100Kb überschreiten wird)

Das Problem dabei ist, dass es eine "nullreferenz-wasweiss ich" gibt. Wie schaff ich es jetzt in ein leeres Array ohne definierte Grenzen einfach Strings reinzuschreiben?
definiert ist es so:
Public readstring() as String

reingeschrieben werden soll wiefolgt:
readstring(d) = "blabla fasel blubber"

d ist dabei eine wachsende int-Variable

wie also bekomme ich es hin einen String zu schreiben den ich danach in ein File schreiben kann? (mit IO.File.Writealllines)

Wenn das nicht mit vb.net klappt muss ich bei dem Projekt wieder mit vb6 anfangen =/, was ich eigentlich nicht verstehe da vb net ja neuer ist und eigentlich mehr können sollte.

Danke schonmal für die hoffentlich bald kommende Hilfe =)
 
Nimm einfach eine Liste.
Code:
List(Of String)
Namespace: System.Collection.Generics

Die Liste hätte dann auch wieder eine Methode (ToArray) um ein Array auszugeben.
 
leider hab ich die Information nicht ganz sicher. Ich sagte nur, dass es fast unmöglich ist das File auf diese Größe aufzupumpen. Das programm soll .eps in .cnc Files umwandeln für eine CNC-Maschine(sonst muss man das ganze per hand eingeben). Dabei hat man immer eine Zeile mehr im File pro linie in der Zeichnung. Und je nachdem wie die Zeichnung aufgebaut ist, Kommen am ende mehr oder weniger Sätze raus. Und wenn sich jemand die mühe macht eine Zeichnung mit über 2000 Objekten zu fertigen, muss das Programm natürlich mehr als nur eine bestimmte Anzahl von Zeilen können. Ich möchte eben einfach ein Anpassungsfähiges Programm haben, das keinen Error fabriziert wenn das File zu groß ist.

Aber das mit der List funktioniert einwandfrei(und erspart mir sogar eine zusätzliche Variable für den Index)

wenn nico das jetz anders gemeint hat, dann entschuldigung. So ganz bin ich eben noch nich drin im vb .net, und alles wissen ist ja auch nicht Pflicht :p
 
und alles wissen ist ja auch nicht Pflicht :p
sagt ja auch keiner :)

Wenn ich das richtig verstanden hab, liest du die komplette Datei ein.
File.ReadAllLine liefert dir schon ein fertiges Array.

Wenn du daraus nur einen bestimmten Satz benötigst an einer weiteren Stelle weißt du das auch, weil dies muss ja irgendwann festgelegt werden.
Also ergibt sich die Größe des neuen Arrays aus Ende der Auswahl minus dem Anfang.

Beispiel
C#:
string[] all = new string[10]();
// jetzt daraus die Zeilen 5 - 8 die Information können zum Beispiel durch Benutzereingabe in das Programm gelangen
int size = 8 - 5 + 1 // wieso plus eins? Weil 8 - 5 = 3, aber 4 Zeilen selektiert werden sollen
string[] subset = new string[size]();
// jetzt nur noch die Daten kopieren
Wie Spyke schon geschrieben hat:
Du kannst das natürlich auch mit einer Generic List machen.
Wenn die Collection sich jedoch nicht permanent ändert ist ein Array besser an der STelle
 
Nope ein fertiges Array kommt da jetz leider nich so ganz in frage :p

hier mal ein Beispiel:
ich habe diesen text
Code:
%!PS-Adobe-2.0 EPSF-2.0
%%BoundingBox: 20 20 560 384
%%Title: C:\Dokumente und Einstellungen\Schueler228\Desktop\test.eps 
%%Creator: AutoCAD LT PSOUT
%%For: Schulreferat-IK, LHM
%%Pages: 1
%%DocumentFonts: (atend)
%%DocumentNeededFonts: (atend)
%%CreationDate: 2009-07-21
%%EndComments
save
20 20 translate
0.24 dup scale
0 setlinewidth
/ACADLayer  { pop } def
/ACADColor { setrgbcolor pop } def
/ACADLtype { pop
userdict /Linedict known not { /Linedict 100 dict def } if
1 index cvn Linedict exch known not {
mark 1 index { dup 0 eq { pop 1 72.0 div } if abs } forall
counttomark 2 add -1 roll astore exch pop
1 index cvn exch Linedict begin def end }
{ pop } ifelse 
Linedict begin cvx exec 0 setdash end } bind def
/bd{bind def}bind def /m{moveto}bd /l{lineto}bd /s{stroke}bd
/a{arc}bd /an{arcn}bd /gs{gsave}bd /gr{grestore}bd
/cp{closepath}bd /tr{translate}bd /sc{scale}bd /co{concat}bd
/ff{findfont}bd /sf{setfont}bd /sh{show}bd /np{newpath}bd
/sw{setlinewidth}bd /sj{setlinejoin}bd /sm{setmiterlimit}bd
/cl{clip}bd /fi{fill}bd
%%EndProlog
%%Page: 1 1
gs np -20 -20 m -20 1533 l  2268 1533 l 2268 -20 l cp cl np 7 0 0 0 ACADColor
(KÖRPERKANTEN) ACADLayer (AUSGEZOGEN) [  ] (A) ACADLtype gs 9.7591 9.7579 sc
65.602 40.1864 tr [ 1 0 0 1 0 0 ] co 0 sw 0 sj 10 sm np 0 0 m 80 0 l 80 80 l
0 80 l cp s gr gs 9.7591 9.7579 sc 65.602 40.1864 tr 10 10 m 70 10 l s gr gs
9.7591 9.7579 sc 65.602 40.1864 tr 70 10 m 40 20 l s gr gs 9.7591 9.7579 sc
65.602 40.1864 tr [ 1 0 0 1 40 40 ] co np 0 0 30 0 180 a s gr
showpage
%%Trailer
restore
%%DocumentFonts:
%%DocumentNeededFonts:
ich lese so lange ein bis ich %%Page: 1 1 finde
dann lasse ich noch 2 zeilen durchlesen und dann lese ich ein bis ein showpage kommt.
somit kann ich also nicht wirklich ein festes array definieren da der part den ich einlese zwichen 1 und XXX Zeilen variieren kann.

Aber das mit der List funktioniert super.

dann hätte ich aber noch eine Frage:
in diesen textdateien kann ein item das eingelesen wird mal 1 mal 2 zeilen sein. Wie kann ich jetzt feststellen dass in der ersten Zeile was fehlt? wenn ich jetzt z.b. das array da auslesen will (erstellt mit Split) wo es nicht mehr existiert, produziere ich ja einen error, dadurch merke ich, dass ich 2 zeilen habe. Nur wie schaff ich es danach weiter auszulesen? muss ich ne funktion (bool) schreiben die dann zurückgibt ob der arraywert existiert?
 
dann hätte ich aber noch eine Frage:
in diesen textdateien kann ein item das eingelesen wird mal 1 mal 2 zeilen sein. Wie kann ich jetzt feststellen dass in der ersten Zeile was fehlt? wenn ich jetzt z.b. das array da auslesen will (erstellt mit Split) wo es nicht mehr existiert, produziere ich ja einen error, dadurch merke ich, dass ich 2 zeilen habe. Nur wie schaff ich es danach weiter auszulesen? muss ich ne funktion (bool) schreiben die dann zurückgibt ob der arraywert existiert?
Hast du ein konkretes Beispiel, hab gerade probleme mich darein zu finden.
Ansonsten könntest du mit hilfe von delegates einige liste Methoden verwenden (Find, Exists, FindAll, etc.)
 
versuchen wirs mal hiermit:
wert1 wert2 wert3 wert4 wert5 wert6

das wäre die komplette zeile
wenn nun ein paar werte besonders lang sind schaut das später dann so aus:
wert1 wert2 wert3 wert4
wert5 wert6

ich lese also so ein
array(0)
array(1)
array(2)
array(3)
array(4)
array(5)
beim 2ten sind aber 4 und 5 leer und erzeugen einen error beim lesen. das sagt mir dass dieser wert dann wohl in der nächsten zeile zu finden ist. soll ich jetz ne funktion schrieben die einfach true oder false zurückgibt wenn ein error kommt beim lesen der variablen? (sind alle public im modul)
 
dann hätte ich aber noch eine Frage:
in diesen textdateien kann ein item das eingelesen wird mal 1 mal 2 zeilen sein. Wie kann ich jetzt feststellen dass in der ersten Zeile was fehlt? wenn ich jetzt z.b. das array da auslesen will (erstellt mit Split) wo es nicht mehr existiert, produziere ich ja einen error, dadurch merke ich, dass ich 2 zeilen habe. Nur wie schaff ich es danach weiter auszulesen? muss ich ne funktion (bool) schreiben die dann zurückgibt ob der arraywert existiert?

Wenn du weißt, wie viele Einträge du pro Zeile erwartest, dann kannst du einfach prüfen, ob die Länge des Arrays das du abfragst der erwarteten Länge entspricht. Wenn das nicht so ist, dann weißt du, dass du in der nächsten Zeile gucken musst.

...passt das so ungefähr?
 

Neue Beiträge

Zurück