txt endlosstring

Bild

Betrifft: txt endlosstring
von: Ingo Harder
Geschrieben am: 15.04.2005 19:21:20
Hallo,
grundsätzlich kann ich *.txt im/exportieren.
Bei folgender Sache habe ich allerdings keinen Schimmer.
In einem *.txt file liegt ein(1) String mit 141.000 Zeichen.
Wie bekomme ich diesen String aufgeteilt nach
je ein Zeichen pro Zelle?
Zeichen 1 = A1
Zeichen 2 = A2
....
Zeichen 10.000 = A10000
Die nächsten Blöcke dann jeweils
im Bereich B, C usw.
Einzelne Zeichen werden dann ggf. ersetzt/gelöscht.
Tja, und dann das ganze wieder als ein String(1) zurück in ein *.txt
Vielen Dank!
Ingo

Bild

Betrifft: AW: txt endlosstring
von: Luc
Geschrieben am: 15.04.2005 19:43:19
Hallo Ingo,
ich hab zwar mal 'ne Fkt geschrieben, die die Zeichen eines string auf Zellen aufteilt, fürchte aber, die nutzt bei der Größenordnung nichts. Sowas kann xl nicht handlen! Das ist eine Frage des Einlesens. Zuvor müsstest du nach jedem Zeichen ein sonst nicht verwendetes, von xl als Wortmarke akzeptierbares Zeichen in den Urtext einsetzen, vermute ich. Sehe da aber doch ziemliche Probleme für die Automatisierung. Oder du musst den Text zeilenweise oder sonstwie in Paketen einlesen. Glaube mich zu erinnern, vor Jahren mal mit dem Read-Befehl operiert zu haben. Wenn dir das gelingt, ist das Aufteilen auf Zellen nur noch ein Klacks. Um sequentiell dann wieder in eine .txt-Datei zu schreiben, ist wohl der Write-Befehl zu verwenden.
Hoffe, das hilft
Gruß Luc :-?
Bild

Betrifft: AW: txt endlosstring
von: andre
Geschrieben am: 15.04.2005 20:08:34
Hallo Ingo,
wenn Du das File einliest kannst Du alles in einen String packen und diesen per Schleife aufteilen. Hier mal ein codeschnipsel. die eingelesenen Dateien waren teilweise über 800 KB groß. Wenn Du jedes Zeichen in eine Zelle tun willst kannst Du den String zeichenweise durchgehen. Ich habe immer nach chr(10) gesucht und den String dort geteilt.
...
Do While Not EOF(file_nr) ' Auf Dateiende abfragen.
Line Input #file_nr, EingangsDaten ' Datenzeilen lesen.
' PC-Dateien mit richtigem Zeielenende - unter UNIX alle Zeilen
' in einem String !
For i = 1 To 15000
j = Len(EingangsDaten)
If j = 0 Then i = 15000: GoTo j_null
lmp = InStr(1, EingangsDaten, Chr(10)) 'lmp kann auch eine fester Wert sein
EingangsDatenLinks = Left(EingangsDaten, lmp - 1)
...
EingangsDaten = (Right(EingangsDaten, j - lmp)) 'linken Teil entfernen
j_null:
Next
Loop
Bild

Betrifft: AW: txt endlosstring
von: Ingo Harder
Geschrieben am: 15.04.2005 20:25:53
Hallo Andre und Luc,
dieser String ist das Ergebnis/die Ascii-Darstellung nach der Umwandlung
einer Datei von 8bit nach 7bit(Base64)
Dieser String hat keine Umbrüche o.ä. sondern ist nur eine
Folge aus 64 versch. Asciizeichen. Irgendwelche Steuerzeichen würden
eine "Rückwandlung" in 8bit vermtl. unmöglich machen.
Ich lade Excel hier gerade Schrittweise, um die "Schmerzgrenze" Kein Speicher usw.
auszutesten.
Gleichwohl würde ich mich freuen, wenn ich die Fkt. von Luc bekommen könnte ?
Testen kann nix schaden ;-)
Ingo
Bild

Betrifft: AW: txt endlosstring
von: andre
Geschrieben am: 15.04.2005 20:52:23
Hallo Ingo,
mit VBA gut solltest Du doch aus meinem code was machen können.
ungetestet und hier geschrieben:
Do While Not EOF(file_nr) ' Auf Dateiende abfragen.
Line Input #file_nr, EingangsDaten ' Datenzeilen lesen. Ist nur eine.
Spalte=1
For i=1 to len(EingangsDaten)
if i=65537 or i= 131073 then spalte=spalte+1 'wenn A voll ist dann in B, analog dann C
cells(Spalte,i)= mid(EingangsDaten,(i-(spalte-1)*65536),1)
Next
Loop
Grüße, Andre
Bild

Betrifft: AW: txt endlosstring
von: andre
Geschrieben am: 16.04.2005 17:10:51
Hallöchen,
Fehlerkorrektur:
falsch
cells(Spalte,i)= mid(EingangsDaten,(i-(spalte-1)*65536),1)
-- Spalte und Zeile vertauscht
richtig
cells(i,Spalte)= mid(EingangsDaten,(i-(spalte-1)*65536),1)
wenn mit mehr als 3 Spalten daten zu rechnen ist sollte man die Abfrage
if i = 65... variabel gestalten mit
if i mod 65537 = 0 then spalte=spalte+1
Bild

Betrifft: AW: txt endlosstring
von: Luc
Geschrieben am: 15.04.2005 21:00:53
Hallo Ingo,
hier mal die Funktion:

Function T2CharVect(ByVal Text As String) As Variant
    Rem wandelt Texte in Einzelzeichenvektoren (Feld: 1 Zchn/Zelle) um - 
    '   (horizontale) Ausgabe in Zellen nur als/in MatrixFormel möglich
    '   Vs 1.0 - 2005 - Autor: L.Schuller - Erstpubl: www.herber.de - 20050415
    Dim i As Integer, n As Integer, z() As String
    n = Len(Text) - 1
    ReDim z(n) As String
    For i = 0 To n
        z(i) = Mid(Text, i + 1, 1)
    Next i
    T2CharVect = z
End Function 

Wenn du die Einzelzeichen in Zeilen ausgeben willst, musst du die Funktionsausgabe mit MTRANS transformieren, also so: {=MTRANS(T2CharVect(textzelle))}
Bei einer Anwendung im Tabellenblatt müssen mindestens so viele Zellen markiert wdn wie der Text Zeichen hat. In der 1.markierten Zelle steht die Formel, die mit {Ctrl}{Shift}{Enter} abgeschlossen wird. Bei Einsatz in Makros muss der von der Funktion erzeugte Vektor übernommen und seine Werte entsprechend verteilt wdn.
Aber wie gesagt, das hilft erst, wenn du den Text irgendwie portioniert hast. Vielleicht über Eingabe mittels Input-Befehl. Hier läuft parallel so ein ähnlicher Thread, an dem ich mich auch beteiligt hatte.
Gruß Luc :-?
Bild

Betrifft: AW: txt endlosstring
von: ingoG
Geschrieben am: 15.04.2005 21:38:29
Hallo Ingo,
versuchs mal so:
Gruß Ingo
PS eine Rückmeldung wäre nett...

Sub aaaa()
Dim i%
Dim text As String
Open "c:\test.txt" For Input As #1
Do While Not EOF(1) ' Auf Dateiende abfragen.
Line Input #1, text
For i = 1 To Len(text)
Cells(i Mod 10000, Int(i / 10000) + 1) = Mid(text, i, 1)
Next i
Loop
Close #1
End Sub

Bild

Betrifft: AW: txt endlosstring
von: Ingo Harder
Geschrieben am: 15.04.2005 22:30:41
Hallo Ingo,
dafür ist der String wohl zu groß.
Bei ca. 30000 Zeichen setzt der
Überlauf ein.
Am erfolgversprechensten sieht es noch
mit dem Lösungsansatz von Andre aus.
Allerdings bekomme ich jetzt noch einen
objektdefinierten Fehler ;-) Ich sehe aber
nur noch Buchstabensuppe vor mir..
Für heute ist Feierabend.
Dank an alle fürs' erste und noch einen
schönen Abend.
Ingo
 Bild

Beiträge aus den Excel-Beispielen zum Thema "Ausgeblendete Zeilen nicht berücksichtigen"