嘿,我正在考虑解决几个小时的问题。我也搜索过网络,并且能够找到一些方法但是没有一个方法可以解决我的问题。
我有一个包含如下数据的单元格:
(Monday@100%[00:00-24:00]);(Tuesday@100%[00:00-24:00]);(Wednesday@100%[00:00-24:00]);(Thursday@100%[00:00-24:00]);(Friday@100%[00:00-24:00]);(Saturday@100%[00:00-24:00]);(Sunday@100%[00:00-24:00])
问题是,这个字符串不一致。它也可能看起来像这样:
(Monday@125%[00:00-04:00]);(Monday@90%[04:00-08:00]);(Monday@90%[08:00-12:00]);(Monday@115%[12:00-16:00]);(Monday@120%[16:00-20:00]);(Monday@115%[20:00-24:00]);(Tuesday@125%[00:00-04:00]);(Tuesday@90%[04:00-08:00]);(Tuesday@90%[08:00-12:00]);(Tuesday@115%[12:00-16:00]);(Tuesday@120%[16:00-20:00]);(Tuesday@115%[20:00-24:00]);(Wednesday@125%[00:00-04:00]);(Wednesday@90%[04:00-08:00]);(Wednesday@90%[08:00-12:00]);(Wednesday@115%[12:00-16:00]);(Wednesday@120%[16:00-20:00]);(Wednesday@115%[20:00-24:00]);(Thursday@125%[00:00-04:00]);(Thursday@90%[04:00-08:00]);(Thursday@90%[08:00-12:00]);(Thursday@115%[12:00-16:00]);(Thursday@120%[16:00-20:00]);(Thursday@115%[20:00-24:00]);(Friday@125%[00:00-04:00]);(Friday@90%[04:00-08:00]);(Friday@90%[08:00-12:00]);(Friday@115%[12:00-16:00]);(Friday@120%[16:00-20:00]);(Friday@115%[20:00-24:00]);(Saturday@125%[00:00-04:00]);(Saturday@90%[04:00-08:00]);(Saturday@90%[08:00-12:00]);(Saturday@115%[12:00-16:00]);(Saturday@120%[16:00-20:00]);(Saturday@115%[20:00-24:00]);(Sunday@125%[00:00-04:00]);(Sunday@90%[04:00-08:00]);(Sunday@90%[08:00-12:00]);(Sunday@115%[12:00-16:00]);(Sunday@120%[16:00-20:00]);(Sunday@115%[20:00-24:00])
字符串的结构是
at
(@)之后,您的号码可以介于0到999之间所以这是我的首发位置。我想要的是提取@和%之间的数字并按时间顺序列出它们(周一到周日,一天中的几个小时)。
我能够使用此公式
提取一周中每一天的@和%之间的数字=MID(B3;SEARCH("Monday@";B3)+7;SEARCH("%";B3)-SEARCH("Monday@";B3)-7)
但这仅适用于每周的每一天只提及的情况。
我不知道如何在每天有更多的时间框架时让它工作。感谢任何帮助。
谢谢,
Ramon的
答案 0 :(得分:2)
尝试一组迭代搜索,其中下一个搜索从找到的上一个结果的位置开始。即:
单元格B6中的放=SEARCH("]",$B$3,B5+1)
放=MID($B$3,SEARCH("(",$B$3,B5+1)+1,SEARCH("@",$B$3,B5+1)-SEARCH("(",$B$3,B5+1)-1)
放=MID($B$3,SEARCH("[",$B$3,B5+1)+1,SEARCH("]",$B$3,B5+1)-SEARCH("[",$B$3,B5+1)-1)
放=MID($B$3,SEARCH("@",$B$3,B5+1)+1,SEARCH("%",$B$3,B5+1)-SEARCH("@",$B$3,B5+1)-1)
(注意B5需要为空(或0)才能正确启动)
然后,您可以根据需要填写每个学期。如果它们出现故障,那么您可以在D列然后是C(当天的时间)订购。
答案 1 :(得分:2)
这可能会让你开始。
Sub Extractor()
Dim data() As String, i As Integer, rw As Integer
rw = 3
data = Split(Range("A1"), ";")
For i = 0 To UBound(data)
Range("A" & rw) = VBA.Mid$(data(i), 2, InStr(1, data(i), "@") - 2) 'Day
Range("B" & rw) = VBA.Mid$(data(i), InStr(1, data(i), "@") + 1, InStr(1, data(i), "%") - InStr(1, data(i), "@") - 1) '% number
Range("C" & rw) = VBA.Mid$(data(i), InStr(1, data(i), "[") + 1, InStr(1, data(i), "]") - InStr(1, data(i), "[") - 1) 'Time
rw = rw + 1
Next i
End Sub
注意:
A1
row 3
答案 2 :(得分:1)
您可以使用excel的文本到列功能,并使用import java.sql.*;
import java.io.*;
import java.util.*;
public class test1
{
public static void main(String[] argv) throws Exception
{
try
{
Connection con = DriverManager.getConnection( "jdbc:postgresql://localhost:5432/old","user","pass");
Connection con1 = DriverManager.getConnection( "jdbc:postgresql://localhost:5432/new","user","pass");
String sql = "INSERT INTO users("+ "name,"+ "active,"+ "login,"+ "password)"+ "VALUES(?,?,?,?)";
Statement statement = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
PreparedStatement pstmt = con1.prepareStatement(sql);
ResultSet rs = statement.executeQuery("SELECT * FROM users");
while ( rs.next() )
{
String nm = rs.getString(2);
Boolean ac = rs.getBoolean(3);
String log = rs.getString(4);
String pass = rs.getString(5);
pstmt.setString(1, nm);
pstmt.setBoolean(2, ac);
pstmt.setString(3, log);
pstmt.setString(4, pass);
pstmt.executeUpdate();
}
con.close();
con1.close();
}
catch (SQLException e)
{
System.out.println("could not get JDBC connection: " +e);
}
}
}
作为分隔符。然后将列转换为行以获得如下内容:
)
然后应用公式。
修改:
只使用(Monday@125%[00:00-04:00]
;(Monday@90%[04:00-08:00]
;(Monday@90%[08:00-12:00]
;(Monday@115%[12:00-16:00]
;(Monday@120%[16:00-20:00]
...
;(Sunday@115%[20:00-24:00]
和Find
即可实现此目的:
find和mid背后的想法总是一样的。
防爆。查找Mid
的内容为(
防爆。用于提取=FIND("(";[Text])
的是Day